JSON Toolkit

ไฟล์ JSON คืออะไร เปิดด้วยอะไร และแก้ไขอย่างไร

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

ผู้เริ่มต้นอ่านประมาณ 9 นาทีเผยแพร่ 2026-10-30อัปเดต 2026-10-30
ภาพหน้าปกพื้นฐานไฟล์ 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. ดับเบิลคลิกแล้วเปิดขึ้นมาเป็นตัวอักษรขยะ ต้องทำอย่างไร

มีสามสาเหตุ แต่ละอย่างจัดการต่างกัน:

  1. จริง ๆ แล้วเป็นไฟล์ไบนารี (เช่นไฟล์บีบอัด หรือไฟล์ฐานข้อมูลที่ส่งออกมา โดยใช้นามสกุล .json) ใช้ file data.json ดูชนิดจริง อย่าฝืนให้มันถูกปฏิบัติเป็นข้อความ
  2. การเข้ารหัสไม่ใช่ UTF-8 ข้อความภาษาจีนที่เข้ารหัสเป็น GBK จะกลายเป็นตัวขยะในสภาพแวดล้อม UTF-8 ใช้คำสั่ง "Reopen with encoding" ของเอดิเตอร์ลอง GBK ดูก่อน; ถ้าแสดงถูกต้อง ให้บันทึกเป็น UTF-8
  3. ไฟล์ถูกเข้ารหัสลับหรือบีบอัด อาการคือขึ้นต้นด้วย 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 จะล้มเหลว