ไฟล์ JSON คืออะไร เปิดด้วยอะไร และแก้ไขอย่างไร
สรุปสำคัญ: จากตัวอักษรขยะใน Notepad ไปจนถึงสามวิธีเปิดไฟล์ JSON พร้อมวิธีตรวจว่าไม่มีอะไรพังหลังแก้ไข และควรทำอย่างไรเมื่อไฟล์ใหญ่เปิดไม่ขึ้น

สรุปสั้น: ก่อนเปิดไฟล์ JSON ให้ยืนยันการเข้ารหัสและ BOM ก่อน แล้วตรวจว่าโครงสร้างเป็น object หรือ array เท่านั้น; หลังแก้ไขให้ตรวจสอบด้วยตัวแยกวิเคราะห์เสมอ อย่าดูวงเล็บและเครื่องหมายจุลภาคด้วยสายตา
มันเป็นเพียงไฟล์ข้อความล้วนที่ลงท้ายด้วย
.jsonแม้แต่ Notepad ก็เปิดได้ ปัญหาปวดหัวจริง ๆ ไม่ใช่ "เปิดไม่ขึ้น" แต่คือเมื่อเปิดขึ้นแล้วคุณมองไม่ออกว่าทำอะไรพังไป
1. ข้างในไฟล์ JSON มีอะไรจริง ๆ
ไฟล์ JSON ที่ถูกต้องบรรจุได้เพียงหนึ่งในสองอย่าง: object {...} หรือ array [...] เท่านั้น ไม่อนุญาตให้มีอย่างอื่น — ไม่มีการประกาศตัวแปร ไม่มีคอมเมนต์ ไม่มีฟังก์ชัน
{
"name": "order service",
"port": 8080,
"debug": false,
"upstream": ["10.0.0.11", "10.0.0.12"],
"timeout": null
}
การจำสามสิ่งในเชิงโครงสร้างก็เพียงพอ:
| สิ่งที่เห็น | ความหมาย | แนวคิดในภาษาโปรแกรมที่ตรงกัน |
|---|---|---|
คู่คีย์-ค่าที่ครอบด้วย { } |
object; คีย์ต้องเป็นสตริงที่ครอบเครื่องหมายคำพูดคู่ | Map / struct |
ลำดับค่าที่ครอบด้วย [ ] |
array; ชนิดขององค์ประกอบต่างกันได้ | List |
| ค่าหกประเภท | สตริง ตัวเลข บูลีน null object array | มีเพียงหกอย่างนี้ ไม่มีวันที่และไม่มีจำนวนเต็ม |
นามสกุลไฟล์ไม่ได้กำหนดเนื้อหา: package.json, tsconfig.json และ composer.json เป็นสิ่งเดียวกันทั้งหมด ต่างกันแค่เครื่องมือแต่ละตัวตกลงอ่านคีย์ต่างกัน
2. สามวิธีเปิด เลือกตามสถานการณ์
แค่อยากดูเร็ว ๆ: เปิดในเบราว์เซอร์ ลากไฟล์เข้าไปในหน้าต่าง Chrome หรือ Edge เบราว์เซอร์จะแสดงตามต้นฉบับ; ถ้าติดตั้งส่วนขยาย JSON Viewer ก็จะจัดรูปแบบสวยและย่อ/ขยายได้อัตโนมัติ
ต้องแก้เนื้อหา: ใช้เอดิเตอร์ VS Code, Sublime และ Notepad++ มีไฮไลต์ไวยากรณ์ JSON และจับคู่วงเล็บครบ และ Shift + Alt + F ใน VS Code จะจัดรูปแบบเอกสาร สังเกตว่า Notepad ของ Windows อาจเพิ่ม BOM ตอนบันทึก การเปลี่ยนแปลงคอนฟิกจึงอาจไม่มีผล ทางที่ดีคือเลี่ยงมัน
ไม่อยากติดตั้งอะไร แค่อยากตรวจสอบ: ใช้ ตัวจัดรูปแบบ JSON ออนไลน์ วางเนื้อหาลงไปก็เห็นเลขบรรทัดและคอลัมน์ ตำแหน่ง error และต้นไม้ที่ย่อ/ขยายได้ทันที เสร็จแล้วคัดลอกผลลัพธ์ออกมา ข้อมูลถูกประมวลผลในเบราว์เซอร์และไม่อัปโหลดขึ้นเซิร์ฟเวอร์
ไฟล์ใหญ่ (หลายสิบ MB ขึ้นไป): อย่าฝืนเปิดในเอดิเตอร์ การเปิดไฟล์ JSON 100 MB ใน VS Code จะค้างจนคุณเริ่มตั้งคำถามกับชีวิต ให้ใช้บรรทัดคำสั่งตรวจโครงสร้างก่อน:
# Look at the first 20 lines to confirm whether it is an array
head -n 20 data.json
# Use jq to list top-level keys without loading the whole file
jq -r 'keys[]' data.json | head
# Count the array length
jq 'length' data.json
3. ดับเบิลคลิกแล้วเปิดขึ้นมาเป็นตัวอักษรขยะ ต้องทำอย่างไร
มีสามสาเหตุ แต่ละอย่างจัดการต่างกัน:
- จริง ๆ แล้วเป็นไฟล์ไบนารี (เช่นไฟล์บีบอัด หรือไฟล์ฐานข้อมูลที่ส่งออกมา โดยใช้นามสกุล
.json) ใช้file data.jsonดูชนิดจริง อย่าฝืนให้มันถูกปฏิบัติเป็นข้อความ - การเข้ารหัสไม่ใช่ UTF-8 ข้อความภาษาจีนที่เข้ารหัสเป็น GBK จะกลายเป็นตัวขยะในสภาพแวดล้อม UTF-8 ใช้คำสั่ง "Reopen with encoding" ของเอดิเตอร์ลอง GBK ดูก่อน; ถ้าแสดงถูกต้อง ให้บันทึกเป็น UTF-8
- ไฟล์ถูกเข้ารหัสลับหรือบีบอัด อาการคือขึ้นต้นด้วย
PK(zip) หรือกองเครื่องหมายคำถาม ไฟล์แบบนี้ต้องแตกไฟล์หรือถอดรหัสก่อน
4. จะยืนยันได้อย่างไรว่าไม่มีอะไรพังหลังแก้ไข
JSON ยอมรับความผิดพลาดเป็นศูนย์: ขาดเครื่องหมายจุลภาคหนึ่งตัว เกินมาหนึ่งตัว หรือขาดเครื่องหมายคำพูดหนึ่งตัว ไฟล์ทั้งไฟล์ก็ตายทันที และตำแหน่ง error ที่รายงานมักชี้ไปที่บรรทัดถัดไป ดังนั้นต้องตรวจสอบหลังแก้ไขเสมอ ห้ามพึ่งสายตา
สามการแก้ไขที่มีความเสี่ยงสูง เรียงตามความถี่ที่ก่อปัญหา:
| การกระทำ | ผลลัพธ์ที่พบบ่อย | วิธีหลีกเลี่ยง |
|---|---|---|
| วางบล็อกคอนฟิกเข้ามาทั้งก้อน | พาเครื่องหมายจุลภาคท้ายรายการหรือเครื่องหมายวรรคตอนแบบเต็มความกว้างเข้ามาด้วย | จัดรูปแบบทันทีหลังวาง |
| สลับลำดับคีย์ด้วยมือ | เครื่องหมายจุลภาคเกินหรือขาด | ใช้คำสั่งย้ายบรรทัดของเอดิเตอร์ อย่าพิมพ์ใหม่ด้วยมือ |
| ลบองค์ประกอบสุดท้ายของ array | เหลือ ,] ค้างอยู่ |
ตรวจว่าวงเล็บจับคู่กันหลังลบ |
การตรวจสอบง่ายมาก: วางลงใน ตัวตรวจสอบออนไลน์ แล้วมองหาข้อความสีแดง หรือรันบรรทัดเดียวในบรรทัดคำสั่ง:
python3 -m json.tool config.json > /dev/null && echo OK
ถ้าพิมพ์ OK แปลว่าไฟล์ถูกต้อง ถ้าต้องการตรวจชนิดฟิลด์ด้วย (เช่น port ต้องเป็นตัวเลขและ name ต้องไม่ว่าง) การเขียน JSON Schema เชื่อถือได้กว่าสายตามนุษย์มาก
5. .json ต่างจากญาติใกล้ชิดอย่างไร
| นามสกุล | ความต่าง | ตัวแยกวิเคราะห์มาตรฐานอ่านได้หรือไม่ |
|---|---|---|
.json |
JSON มาตรฐาน | ได้ |
.jsonc |
อนุญาตคอมเมนต์ // และ /* */ |
ไม่ได้; ต้องลบคอมเมนต์ก่อน |
.json5 |
อนุญาตคอมเมนต์ เครื่องหมายคำพูดเดี่ยว คีย์ที่ไม่ครอบเครื่องหมายคำพูด และเครื่องหมายจุลภาคท้ายรายการ | ไม่ได้; ต้องใช้ตัวแยกวิเคราะห์ JSON5 |
.jsonl / .ndjson |
JSON อิสระหนึ่งชิ้นต่อบรรทัด; ทั้งไฟล์ไม่ใช่ JSON ที่ถูกต้อง | ไม่ได้ทั้งไฟล์; ต้องอ่านทีละบรรทัด |
อย่าแปลกใจที่เห็นคอมเมนต์ใน tsconfig.json; จริง ๆ แล้วมันถูกจัดการเป็น .jsonc ถ้าป้อนเนื้อหาเดียวกันให้ JSON.parse จะเกิด error เมื่อต้องแปลงระหว่างกัน ให้ใช้ JSON5 เป็น JSON เพื่อลบคอมเมนต์และเครื่องหมายจุลภาคท้ายรายการในคลิกเดียว
6. เมื่อใดควรเปลี่ยนรูปแบบการจัดเก็บ
JSON เหมาะกับสถานการณ์ที่ "โครงสร้างไม่ตายตัว มนุษย์ต้องอ่าน และส่งข้ามภาษา" ถ้าไฟล์เกินหลายสิบ MB โครงสร้างฟิลด์นิ่ง และต้องสอบถามแบบมีเงื่อนไข การยึด JSON ไว้ก็แค่สร้างปัญหาให้ตัวเอง — ให้ย้ายไป SQLite, Parquet หรือโหลดเข้าฐานข้อมูล ประสิทธิภาพการอ่าน/เขียนต่างกันหลายอันดับขนาด สำหรับข้อแลกเปลี่ยนเฉพาะ ดู การแยกวิเคราะห์และสตรีมมิ่ง JSON ขนาดใหญ่
คำถามที่พบบ่อย
จะตรวจไฟล์ JSON ที่ใหญ่เกินกว่าจะเปิดได้อย่างไร
อย่าฝืนเปิดในเอดิเตอร์ การเปิดไฟล์ JSON 100 MB ใน VS Code จะค้างจนคุณเริ่มตั้งคำถามกับชีวิต ให้ใช้บรรทัดคำสั่งตรวจโครงสร้างก่อน: head -n 20 ยืนยันว่าเป็น array หรือไม่ jq -r 'keys[]' แสดงเฉพาะคีย์ระดับบนสุด และ jq 'length' นับความยาวของ array คำสั่งเหล่านี้ไม่โหลดไฟล์ทั้งหมด
ทำไมการแก้ไขใน Notepad ทำให้คอนฟิกไม่มีผล
Notepad ของ Windows อาจเพิ่ม BOM ตอนบันทึก และไฟล์ที่มี BOM จะแยกวิเคราะห์คอนฟิกไม่ผ่าน เนื้อหาที่แก้จึงไม่มีผล บทความแนะนำให้ใช้เอดิเตอร์อย่าง VS Code, Sublime หรือ Notepad++ ซึ่งมีไฮไลต์ไวยากรณ์ JSON และจับคู่วงเล็บครบ ถ้าใช้ Notepad ไปแล้ว ให้บันทึกใหม่เป็น "UTF-8 without BOM" แล้วลองอีกครั้ง
ใช้ไฟล์ JSON เป็น JSON5 แล้วใส่คอมเมนต์ได้ไหม
ไม่ได้ — ตัวแยกวิเคราะห์มาตรฐานไม่อนุญาตคอมเมนต์ในไฟล์ .json และ JSON.parse จะเกิด error ทันที คอมเมนต์ต้องอยู่ในไฟล์ .jsonc หรือ .json5 ที่อ่านด้วยตัวแยกวิเคราะห์ที่ตรงกัน ไฟล์อย่าง tsconfig.json จริง ๆ ถูกจัดการเป็น .jsonc; ถ้าป้อนเนื้อหาเดียวกันให้ JSON.parse จะล้มเหลว