JSON
JSON Path Extractor / Flatten
Làm phẳng (Flatten) JSON lồng nhau thành danh sách phẳng "đường dẫn: giá trị" và dựng lại thành cấu trúc lồng nhau (Unflatten). Ký hiệu đường dẫn giống với 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.
Bài viết về công cụ này: JSON Flatten: biến cấu trúc lồng nhau thành danh sách phẳng
Câu hỏi thường gặp
"Làm phẳng" (flatten) một object JSON thực chất làm gì?
Nó chuyển các object và mảng lồng nhau thành một object một cấp với khóa ký hiệu dấu chấm hoặc ngoặc vuông (như user.address.city hay items[0].id), giúp dữ liệu lồng sâu dễ đọc hơn dưới dạng bảng phẳng hoặc nhập vào công cụ bảng tính.
JSON đã làm phẳng có thể chuyển ngược lại dạng lồng ban đầu không?
Có, miễn là ký hiệu khóa nhất quán — đảo ngược quá trình sẽ tái tạo cấu trúc lồng ban đầu bằng cách tách từng đường dẫn khóa trở lại thành object và mảng.
Làm phẳng có làm mất thông tin nào từ JSON gốc không?
Không. Mọi giá trị đều được giữ nguyên; chỉ cấu trúc thay đổi, vì mỗi đường dẫn lồng duy nhất trở thành khóa phẳng riêng của nó.
Điều gì xảy ra nếu khóa thực tế tự nó chứa dấu chấm?
Đây là tình huống mơ hồ: đường dẫn user.name có thể có nghĩa là object lồng nhau {"user": {"name": ...}}, hoặc là khóa phẳng {"user.name": ...}. Ký hiệu dấu chấm không phân biệt được hai trường hợp này, nên nên tránh dùng khóa như vậy hoặc xử lý riêng.
Định dạng đường dẫn có giống nhau ở mọi công cụ tương tự không?
Không. Ký hiệu dấu chấm cho object (user.name) khá phổ biến ở hầu hết mọi nơi, nhưng cách ký hiệu chỉ số mảng lại khác nhau: ở đây dùng items[0], trong khi một số thư viện khác viết items.0 không có ngoặc.