คำถามที่พบบ่อยเรื่องการใช้เครื่องมือ: ข้อมูล ไฟล์ และการส่งออก
ข้อมูลถูกอัปโหลดหรือไม่ ไฟล์ใหญ่แค่ไหนถึงใช้ได้ มีอะไรถูกเก็บไว้ในเครื่องบ้าง ทำไมภาษาจีนกลายเป็น escape: สิบคำถามที่ระบุขอบเขตจริงของเครื่องมือ JSON ออนไลน์
รวมคำถามที่ถูกถามบ่อยที่สุดเกี่ยวกับเครื่องมือบนเว็บไซต์นี้และเกี่ยวกับมาตรฐาน JSON จัดกลุ่มตามสถานการณ์ พร้อมคำตอบที่นำไปใช้ได้ทันทีแทนข้อสรุปที่คลุมเครือ
25 บทความข้อมูลถูกอัปโหลดหรือไม่ ไฟล์ใหญ่แค่ไหนถึงใช้ได้ มีอะไรถูกเก็บไว้ในเครื่องบ้าง ทำไมภาษาจีนกลายเป็น escape: สิบคำถามที่ระบุขอบเขตจริงของเครื่องมือ JSON ออนไลน์
comment อนุญาตหรือไม่, ทำไม trailing comma ถึง error, key ต้องมี quote ไหม, ทำไม 9007199254740993 เปลี่ยนค่า — สิบสองข้อสรุปที่แต่ละข้อเทียบกับ RFC 8259
การ query ด้วย path ควรใช้ JSONPath หรือ Pointer, จะเลือก Patch กับ Merge Patch อย่างไร, Schema กันอะไรได้บ้าง และควรเลือก draft เวอร์ชันไหน — อธิบายครบในรอบเดียว
ทำไมไฟล์ JSON หลายสิบ MB เปิดไม่ขึ้น, การ deep clone แพงแค่ไหน, จะป้องกันการปนเปื้อน __proto__ อย่างไร และ XSS แทรกเข้ามาทางไหน — สิบข้อสรุปแบบปฐมพยาบาลที่จัดเรียงตามอาการ
สไตล์การตั้งชื่อ, รูปแบบเวลา, ความหมายของ null, รูปแบบของ enum, รูปแบบ config, การจัดระเบียบ fixture และ merge conflict — สิบสองการแลกเปลี่ยนที่ทีมเถียงกันจริง
RFC 8259 ไม่มีไวยากรณ์สำหรับ comment ดังนั้น // และ block comment ทำให้ JSON.parse throw ให้เปลี่ยนไปใช้ JSON5 หรือ JSONC, ฟิลด์ _comment, description ใน Schema หรือ YAML แทน
trailing comma ถูกกฎใน object literal ของ JavaScript แต่เป็นเรื่องถึงตายใน JSON นี่คือ error ที่เกิดจริง ไวยากรณ์ RFC 8259 ที่เป็นสาเหตุ และวิธีแก้สามแบบที่ได้ผลจริง
BOM แบบ UTF-8 คือสามไบต์ที่มองไม่เห็น ดังนั้น JSON.parse จึงล้มเหลวที่อักขระตัวแรกและรายงานบรรทัด 1 คอลัมน์ 1 ทำให้ไฟล์ดูเหมือนว่างหรือถูกตัดทอน
JSON มีเฉพาะ literal ของตัวเลขฐานสิบเท่านั้น JSON.stringify เปลี่ยน NaN และ Infinity เป็น null โดยไม่เตือน นี่คือเหตุผลที่ "ฟิลด์ตัวเลขบางครั้งเป็น null" ยังโผล่ใน production
จำนวนเต็มที่เกิน 2^53-1 สูญเสียความแม่นยำใน JSON.parse snowflake ID, หมายเลขคำสั่งซื้อ และ bigint ในฐานข้อมูลล้วนเจอปัญหานี้ จึงควรเก็บเป็น string ตลอดทั้งเส้นทาง
การ escape แบบ \u4e2d\u6587 เป็น Unicode ที่ถูกกฎ ไม่ใช่การเข้ารหัสล้มเหลว ตัวอักษรเพี้ยนจริงหน้าตาต่างออกไป และการแยกแยะสองกรณีนี้ตัดสินว่าคุณต้องแก้อะไรจริง ๆ
superset ที่เข้มงวดเรียงตามลำดับ: JSONC เพิ่ม comment; JSON5 เพิ่มเครื่องหมายคำพูดเดี่ยว, key ที่ไม่มีเครื่องหมายคำพูด, trailing comma และเลขฐานสิบหก ถ้าเลือกผิดจะพังที่ API ไม่ใช่ที่ editor
JSON คั่นโครงสร้างด้วยปีกกา ส่วน YAML ใช้การย่อหน้า: เครื่องจักรได้ JSON คนที่ดูแล config ได้ YAML แต่คอมเมนต์ anchor และโครงสร้างหลายเอกสารจะหายไป
JSON Pointer คือที่อยู่ที่ไม่ซ้ำซึ่งเก็บเป็นคีย์ได้; JSONPath คือภาษา query การเลือกใช้ผิดจะทำให้การอัปเดต config พังหรือต้องสร้าง JSONPath ที่ไม่สมบูรณ์ขึ้นมาเอง
Schema ควบคุมโครงสร้างและชนิดข้อมูล ไม่ใช่ความหมายทางธุรกิจ มันกันฟิลด์ที่หาย ชนิดผิด และ enum นอกช่วง แต่กฎอย่างยอดเงินต้องมากกว่าศูนย์ยังอยู่ที่โค้ด
2020-12 เป็นเวอร์ชันปัจจุบันและเพิ่ม `$defs`, `prefixItems` และ `unevaluatedProperties` แต่เครื่องมือจำนวนมากยังรู้จักแค่ draft-07 เลือกตามสิ่งที่ toolchain ทั้งหมดของคุณรองรับ
json-schema-to-typescript และ quicktype สร้าง .d.ts ได้ในคำสั่งเดียว แต่มันเป็นเพียงร่าง: optionality, union, additionalProperties และวันที่ยังต้องมีคนตรวจ
การ optimize ผิดลำดับทำให้การเปลี่ยนไลบรารีไร้ประโยชน์ วัด network, parse และ render แยกกันก่อน แล้วจึงลดจำนวน parse ย่อ payload และ stream
JSON.parse มอง __proto__ เป็นคีย์ธรรมดา; ความเสียหายเกิดใน recursive merge ที่เขียนไปยัง Object.prototype ทำให้ทุก object สืบทอดพร็อพเพอร์ตี้ของผู้โจมตี
JSON ไม่เคยทำงานเอง XSS เกิดขึ้นในจังหวะที่คุณปฏิบัติกับมันเป็น HTML — การต่อสตริงฝั่งเซิร์ฟเวอร์, innerHTML ฝั่ง frontend หรือการฝัง JSON ลงในแท็ก script โดยตรง
คุณไม่ต้องอ่านนโยบายความเป็นส่วนตัวเพื่อรู้คำตอบ เปิด network panel ลองใช้หน้าตอนออฟไลน์ และ refresh ดูว่ามีอะไรถูกเก็บไว้ สองนาที สามการตรวจ ไม่ต้องเชื่อใจใคร
ไม่มีขีดจำกัดตายตัว; ข้อจำกัดคืองบหน่วยความจำของแท็บ ไฟล์ 20MB มักกลายเป็น 60–100MB เมื่อ parse แล้ว และ DOM ที่ไฮไลต์อาจทำให้เพิ่มเป็นสองเท่าอีกครั้ง
object เปล่า ๆ สะอาดจนกระทั่งต้องมี metadata; envelope เต็มรูปแบบปลอดภัยแต่ยาว สำหรับโปรเจกต์ส่วนใหญ่ใช้ HTTP status บอกผลลัพธ์และ envelope ที่คงที่สำหรับ data
ตัวเลข epoch และสตริง ISO ต่างมีข้อแลกเปลี่ยน แต่การผสมกันคือสิ่งที่ทำให้พังจริง ๆ ใช้ ISO 8601 พร้อม offset เก็บเป็น UTC และแสดงตามเขตเวลาของผู้ใช้
`null` บอกว่าฟิลด์มีอยู่แต่ไม่มีค่า; การไม่ใส่ฟิลด์บอกว่าฟิลด์ไม่มีอยู่ PATCH body การ merge config และการเติมฟอร์มคือจุดที่ความต่างนี้สำคัญ