จัดรูปแบบและตรวจสอบ JSON
วาง JSON เพื่อจัดรูปแบบให้อ่านง่าย ย่อให้กะทัดรัด หรือเรียงคีย์ หากแยกวิเคราะห์ไม่ได้ เครื่องมือจะแสดงบรรทัดและคอลัมน์ที่ตัวแยกวิเคราะห์หยุดทำงาน พร้อมตัวชี้ใต้จุดที่มีปัญหา จึงหาเครื่องหมายจุลภาคที่ขาดหายในผลลัพธ์ยาว 3,000 บรรทัดได้ภายในไม่กี่วินาที
0 ตัวอักษร · 0 คำ · 0 บรรทัด
0 ตัวอักษร · 0 คำ · 0 บรรทัด
ทำงานทั้งหมดภายในแท็บเบราว์เซอร์นี้ ข้อความของคุณจะไม่ถูกอัปโหลดหรือจัดเก็บไว้
ประเภทค่าใน JSON
RFC 8259 อนุญาตเฉพาะค่าเหล่านี้เท่านั้น อ็อบเจกต์และอาร์เรย์ซ้อนกันได้ ส่วนค่าอื่นทั้งหมดเป็นค่าปลายทาง
| ประเภท | ตัวอย่าง | กฎ |
|---|---|---|
| อ็อบเจกต์ (Object) | {"id": 7, "tags": ["a"]} | คีย์ต้องเป็นสตริงในเครื่องหมายอัญประกาศคู่ สมาชิกคั่นด้วยจุลภาคและห้ามมีจุลภาคต่อท้าย |
| อาร์เรย์ (Array) | [1, "two", null] | รายการค่าใดก็ได้ที่มีลำดับ ผสมหลายประเภทได้ |
| สตริง (String) | "caf\u00e9 \"quoted\"" | ใช้อัญประกาศคู่เท่านั้น อักขระควบคุมต้อง escape และ \u escape ใช้เลขฐานสิบหกสี่หลัก |
| ตัวเลข (Number) | -12.5e3 | เลขฐานสิบเท่านั้น: มีเครื่องหมายลบได้ ห้ามมีศูนย์นำหน้า มีส่วนทศนิยมและเลขชี้กำลังได้ ไม่รองรับ NaN หรือ Infinity |
| ค่าคงที่ true, false, null | true | ตัวพิมพ์เล็ก ไม่มีอัญประกาศ |
สิ่งที่ตัวแยกวิเคราะห์ปฏิเสธ
ข้อมูลเข้าแต่ละรายการด้านล่างถูกส่งให้ JSON.parse ตัวเดียวกับที่เครื่องมือจัดรูปแบบใช้ ในขณะที่สร้างหน้านี้
| ข้อมูลเข้า | ปัญหา | JSON.parse |
|---|---|---|
{"a": 1,} | จุลภาคต่อท้าย | ปฏิเสธ |
{'a': 1} | สตริงในอัญประกาศเดี่ยว | ปฏิเสธ |
{"a": 1 /* note */} | คอมเมนต์ | ปฏิเสธ |
{a: 1} | คีย์ที่ไม่มีอัญประกาศ | ปฏิเสธ |
{"n": NaN} | NaN ไม่ใช่ตัวเลขใน JSON | ปฏิเสธ |
{"n": 012} | ศูนย์นำหน้า | ปฏิเสธ |
{"n": 0x1F} | ตัวเลขฐานสิบหก | ปฏิเสธ |
การ escape ในสตริง JSON
| อักขระ | การเขียนใน JSON |
|---|---|
| อัญประกาศคู่ | "\"" |
| แบ็กสแลช | "\\" |
| ขึ้นบรรทัดใหม่ (line feed) | "\n" |
| แท็บ | "\t" |
| ปัดแคร่ (carriage return) | "\r" |
| อักขระควบคุม U+0001 | "\u0001" |
| สแลช (escape หรือไม่ก็ได้) | "/" |
| ตัวอักษรนอก ASCII (ไม่ต้อง escape) | "é" |
กฎที่เอกสาร JSON ที่ถูกต้องต้องปฏิบัติตาม
JSON กำหนดไว้ใน RFC 8259 (เนื้อหาเหมือนกับ ECMA-404) เอกสาร JSON คือค่าเดียว ซึ่งอาจเป็นออบเจ็กต์ อาร์เรย์ สตริง ตัวเลข true, false หรือ null คีย์ของออบเจ็กต์ต้องเป็นสตริงในเครื่องหมายคำพูดคู่เสมอ สตริงใช้ได้เฉพาะเครื่องหมายคำพูดคู่ และต้องใส่เครื่องหมายหลีกให้กับเครื่องหมายคำพูด แบ็กสแลช และอักขระควบคุมทุกตัวที่ต่ำกว่า U+0020 ดังนั้นแท็บและการขึ้นบรรทัดใหม่ภายในสตริงจึงต้องเขียนเป็น \t และ \n นอกจากนี้ RFC 8259 ยังกำหนดให้ JSON ที่แลกเปลี่ยนกันระหว่างระบบใช้การเข้ารหัส UTF-8
ตัวเลขต้องเป็นเลขฐานสิบ ห้ามขึ้นต้นด้วยศูนย์ ห้ามใช้เลขฐานสิบหก ห้ามใช้ NaN หรือ Infinity และห้ามมีเครื่องหมายบวกนำหน้า ฟอร์แมตนี้ไม่มีคอมเมนต์และไม่อนุญาตให้มีเครื่องหมายจุลภาคท้ายรายการ สองข้อหลังนี้เป็นสาเหตุของข้อผิดพลาดส่วนใหญ่ในการใช้งานจริง เพราะออบเจ็กต์ลิเทอรัลของ JavaScript, JSON5 และไฟล์คอนฟิกจำนวนมากอนุญาตทั้งสองอย่าง ตารางอ้างอิงด้านล่างสร้างขึ้นจากการป้อนข้อผิดพลาดที่พบบ่อยแต่ละแบบให้พาร์เซอร์ตัวเดียวกับที่เครื่องมือจัดรูปแบบนี้ใช้
จัดรูปแบบให้อ่านง่าย ย่อ และเรียงคีย์
การจัดรูปแบบให้อ่านง่าย (pretty-print) จะเพิ่มการขึ้นบรรทัดใหม่และการเยื้องเพื่อให้เห็นโครงสร้างชัดเจน การเว้นวรรคสองตัวเป็นรูปแบบที่พบบ่อยที่สุดในโปรเจกต์ JavaScript ส่วนการเว้นวรรคสี่ตัวเป็นตัวเลือกทั่วไปของ json.dumps(indent=4) ใน Python และการใช้แท็บช่วยให้ผู้อ่านเลือกความกว้างเองได้ การย่อ (minify) จะลบช่องว่างที่ไม่จำเป็นทั้งหมด ทำให้ข้อมูล API มีขนาดเล็กลง และทำให้เอกสารอยู่ในบรรทัดเดียวสำหรับล็อกหรือตัวแปรสภาพแวดล้อม
การเรียงคีย์ (Sort keys) จะเรียงสมาชิกของทุกออบเจ็กต์ตามตัวอักษรแบบเรียกซ้ำ โดยนิยามแล้วออบเจ็กต์ JSON ไม่มีลำดับ การเรียงจึงไม่เปลี่ยนความหมาย แต่ช่วยให้เปรียบเทียบเอกสารจากสองระบบได้ง่ายขึ้นมาก โปรดทราบว่าการพาร์สจะแปลงตัวเลขเป็นค่า double ของ JavaScript จำนวนเต็มที่มากกว่า 2^53 (9,007,199,254,740,992) เช่น ID ของฐานข้อมูลบางตัว จะสูญเสียความแม่นยำเมื่อจัดรูปแบบใหม่ จึงควรเก็บค่าเหล่านั้นเป็นสตริง
แปลง JSON เป็นฟอร์แมตอื่น
เอกสารที่จัดรูปแบบแล้วอ่านง่ายขึ้น แต่บางครั้งคุณอาจต้องการในรูปแบบอื่น อาร์เรย์ของออบเจ็กต์สามารถกลายเป็นสเปรดชีตได้ด้วย แปลง JSON เป็น CSV และเครื่องมือแปลงไฟล์ข้อมูลช่วยแปลงทั้งไฟล์ระหว่าง JSON, XML, YAML และ CSV
คำถามที่พบบ่อย
- ทำไมเครื่องมือจัดรูปแบบจึงไม่รับ JSON ที่มีคอมเมนต์
- JSON มาตรฐานไม่มีไวยากรณ์สำหรับคอมเมนต์ RFC 8259 ละไว้โดยเจตนา ให้ลบคอมเมนต์ออก หรือเก็บไฟล์เป็น JSONC หรือ JSON5 หากเครื่องมือที่อ่านไฟล์รองรับฟอร์แมตเหล่านั้น
- "Unexpected token" ในข้อผิดพลาด JSON หมายความว่าอะไร
- พาร์เซอร์พบอักขระที่ไม่สามารถอยู่ในตำแหน่งนั้นได้ เช่น เครื่องหมายคำพูดเดี่ยว เครื่องหมายจุลภาคท้ายรายการก่อน } หรือคีย์ที่ไม่มีเครื่องหมายคำพูด บรรทัดและคอลัมน์ที่แสดงจะชี้ไปที่อักขระนั้น
- การเรียงคีย์ทำให้ข้อมูลเปลี่ยนไปหรือไม่
- ไม่ ลำดับสมาชิกของออบเจ็กต์ไม่มีความหมายใน JSON เอกสารที่เรียงคีย์แล้วจึงมีความหมายเทียบเท่าเดิม ส่วนลำดับของอาร์เรย์มีความหมายและจะไม่ถูกเปลี่ยนเลย
- ทำไมตัวเลขยาว ๆ จึงเปลี่ยนไปหลังจัดรูปแบบ
- JavaScript เก็บตัวเลขเป็นจำนวนทศนิยม 64 บิต ซึ่งแสดงจำนวนเต็มได้แม่นยำถึง 2^53 เท่านั้น ID ที่ใหญ่กว่านั้นจะถูกปัดเมื่อพาร์ส ให้ส่งเป็นสตริงเพื่อเก็บทุกหลักไว้ครบ
- จัดรูปแบบไฟล์ JSON โดยไม่ต้องวางข้อความได้หรือไม่
- เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความใดก็ได้ เลือกทั้งหมดแล้ววางที่นี่ ไฟล์ขนาดใหญ่มากระดับหลายสิบเมกะไบต์อาจทำให้แท็บทำงานช้าขณะที่ช่องข้อความแสดงผล