JSON
JSON Path Extractor / Flatten
แปลง JSON แบบซ้อนกันให้เป็นรายการแบบแบน "เส้นทาง: ค่า" (Flatten) และประกอบกลับเป็นโครงสร้างซ้อนกัน (Unflatten) รูปแบบเส้นทางเหมือนกับใน JSONPath/JSON Diff: store.book[0].price
Deeply nested JSON is hard to compare or iterate over programmatically. Flatten unrolls such a structure into a flat list of "path: value" pairs (e.g. store.book[0].price: 12.99), and Unflatten rebuilds it.
How to use it
- Flatten: paste nested JSON and get a flat list of every leaf value with its full path.
- Unflatten: paste a list of "path: value" pairs to rebuild a nested JSON structure from it.
- The path notation matches this site's JSONPath and JSON Diff tools — items[0].name for array elements.
Common uses
- Turning a deeply nested API response into a flat list for import into a spreadsheet or analytics system.
- Building a translation dictionary or config back into nested JSON from flat keys (form.errors.email).
- Quickly finding every value on a given topic in a very large JSON document via a flat path list.
Things to keep in mind
Array index notation varies between libraries — this tool uses items[0], though some write items.0 without brackets.
Unflatten requires that paths don't conflict with each other (e.g. one and one.two at the same time) — otherwise the structure can't be unambiguously rebuilt.
บทความเกี่ยวกับเครื่องมือนี้: JSON Flatten: แปลงโครงสร้างซ้อนกันให้เป็นรายการแบบแบน
คำถามที่พบบ่อย
การ "flatten" object JSON ทำอะไรกันแน่?
มันแปลง object และ array ที่ซ้อนกันให้เป็น object ระดับเดียวที่มีคีย์แบบจุดหรือวงเล็บเหลี่ยม (เช่น user.address.city หรือ items[0].id) ทำให้ข้อมูลที่ซ้อนลึกอ่านง่ายขึ้นในรูปตารางแบนหรือนำเข้าโปรแกรมสเปรดชีตได้
JSON ที่ทำ flatten แล้วแปลงกลับเป็นรูปแบบซ้อนเดิมได้ไหม?
ได้ ตราบใดที่รูปแบบคีย์สม่ำเสมอ — การย้อนกระบวนการจะสร้างโครงสร้างซ้อนเดิมกลับคืนโดยแยกแต่ละเส้นทางคีย์กลับเป็น object และ array
การทำ flatten ทำให้ข้อมูลจาก JSON ต้นฉบับหายไปหรือไม่?
ไม่ ทุกค่าจะถูกเก็บไว้ มีเพียงโครงสร้างที่เปลี่ยนไป เพราะแต่ละเส้นทางซ้อนที่ไม่ซ้ำกันจะกลายเป็นคีย์แบนของตัวเอง
จะเกิดอะไรขึ้นหากคีย์จริงมีจุดอยู่ในตัวเอง?
นี่คือสถานการณ์ที่กำกวม: เส้นทาง user.name อาจหมายถึงทั้ง object ที่ซ้อนกัน {"user": {"name": ...}} หรือคีย์แบบแบน {"user.name": ...} รูปแบบสัญกรณ์จุดไม่สามารถแยกความแตกต่างนี้ได้ จึงควรหลีกเลี่ยงคีย์แบบนี้หรือจัดการแยกต่างหาก
รูปแบบเส้นทางเหมือนกันในทุกเครื่องมือลักษณะนี้หรือไม่?
ไม่ สัญกรณ์จุดสำหรับ object (user.name) พบได้ทั่วไปแทบทุกที่ แต่สัญกรณ์สำหรับดัชนีอาร์เรย์แตกต่างกันไป — ที่นี่ใช้ items[0] แต่บางไลบรารีเขียนเป็น items.0 โดยไม่มีวงเล็บ