Làm phẳng JSON
Chuyển JSON lồng nhau thành các khóa phẳng có dấu phân cách và khôi phục lại cấu trúc gốc khi cần. Toàn bộ thao tác được xử lý an toàn ngay trong trình duyệt.
Đề xuất Liên quan
Trường hợp sử dụng
- Truy vấn và cập nhật MongoDB: dùng khóa có dấu chấm thay cho việc tự gõ đầy đủ đường dẫn lồng nhau
- Xuất sang CSV và Excel: biến JSON nhiều tầng thành cột phẳng để xử lý dạng bảng
- Chuẩn bị dữ liệu cho Elasticsearch: đơn giản hóa tài liệu lồng sâu trước khi lập chỉ mục
- Gỡ lỗi API: so sánh trường của request và response trong cùng một dạng khóa phẳng
- Tiền xử lý cấu hình và biến môi trường: bung các thiết lập lồng nhau từ package.json hoặc settings.json
Cách Sử dụng
- Dán JSON vào ô bên trái hoặc tải lên tệp .json từ máy
- Chọn chế độ flatten hoặc unflatten, rồi đặt dấu phân cách, cách xử lý mảng và độ sâu tối đa
- Xem kết quả ở khung bên phải cùng số lượng khóa và thống kê độ sâu
- Sao chép kết quả hoặc tải xuống dưới dạng tệp .json
Tính năng
- Chuyển đổi hai chiều: hỗ trợ cả flatten và unflatten để đổi qua lại giữa cấu trúc lồng nhau và cấu trúc phẳng
- Tùy chỉnh dấu phân cách: dùng dấu chấm, gạch dưới, dấu gạch chéo hoặc ký tự riêng theo hệ thống đích
- Xử lý mảng linh hoạt: có thể bung mảng theo chỉ mục hoặc giữ nguyên cả mảng như một giá trị
- Giới hạn độ sâu tối đa: dừng bung ở mức cần thiết để tránh sinh khóa quá dài
- Xử lý cục bộ an toàn: JSON không được tải lên máy chủ, mọi thao tác diễn ra trong trình duyệt
- Quy trình tiện lợi: hỗ trợ tải lên .json, dùng dữ liệu mẫu, sao chép kết quả và tải tệp về
Ví dụ mã
Làm phẳng JSON bằng JavaScript
javascriptfunction flatten(obj, prefix = '', sep = '.') {
return Object.entries(obj).reduce((acc, [key, value]) => {
const newKey = prefix ? `${prefix}${sep}${key}` : key;
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
Object.assign(acc, flatten(value, newKey, sep));
} else {
acc[newKey] = value;
}
return acc;
}, {});
}
flatten({ user: { name: 'Alice', contact: { email: 'a@x.com' } } });
// => { 'user.name': 'Alice', 'user.contact.email': 'a@x.com' }Làm phẳng JSON bằng Python
pythondef flatten(obj, parent_key='', sep='.'):
items = {}
for key, value in obj.items():
new_key = f"{parent_key}{sep}{key}" if parent_key else key
if isinstance(value, dict):
items.update(flatten(value, new_key, sep))
else:
items[new_key] = value
return items
import json
print(json.dumps(flatten({'user': {'name': 'Alice'}}), indent=2))
# => {"user.name": "Alice"}Làm phẳng JSON bằng jq trong dòng lệnh
bash# Chuyển JSON lồng nhau thành cấu trúc phẳng với khóa ngăn bằng dấu chấm
jq '[paths(scalars) as $p | {"key": $p | join("."), "value": getpath($p)}] | from_entries' data.json
# Khôi phục JSON phẳng về cấu trúc lồng nhau
# Dùng jq 1.7+ với bộ lọc ngoài hoặc chế độ unflatten của công cụ nàyCâu hỏi Thường gặp
Làm phẳng JSON là gì và khi nào nên dùng?
Làm phẳng JSON là chuyển các đối tượng và mảng lồng nhau thành cặp khóa-giá trị một tầng. Tính năng này hữu ích khi làm truy vấn MongoDB, xuất CSV, lập chỉ mục Elasticsearch, tạo biến môi trường hoặc so sánh trường dữ liệu API.
Có thể khôi phục JSON đã làm phẳng về cấu trúc ban đầu không?
Có. Chỉ cần dùng đúng dấu phân cách, công cụ sẽ dựng lại đối tượng và mảng từ các khóa phẳng. Các khóa số liên tiếp sẽ được nhận diện tự động là mảng.
Tôi có thể đổi dấu phân cách và cách xử lý mảng không?
Có. Bạn có thể dùng dấu chấm, gạch dưới, dấu gạch chéo, gạch dưới kép hoặc ký tự tùy chỉnh. Mảng có thể bung thành `items.0`, `items.1` hoặc được giữ nguyên như một giá trị.
Xử lý JSON online có an toàn không?
Có. Tất cả thao tác phân tích và chuyển đổi đều chạy ngay trong trình duyệt, nên dữ liệu JSON không bị gửi ra máy chủ bên ngoài.
Tôi dùng kết quả này với MongoDB như thế nào?
MongoDB truy cập trường lồng nhau bằng đường dẫn có dấu chấm. Các khóa do công cụ tạo ra có thể dùng trực tiếp trong `find`, `update` và pipeline tổng hợp.
Kết quả có phù hợp để xuất CSV hoặc dùng trong Excel không?
Có. Sau khi làm phẳng, các trường đều nằm trên cùng một cấp nên rất dễ chuyển tiếp sang JSON to CSV, Excel hoặc Pandas dưới dạng cột.
Nếu khóa gốc đã chứa dấu chấm hoặc dấu phân cách thì sao?
Khi đó quá trình khôi phục có thể hiểu nhầm cấp lồng nhau. Bạn nên đổi sang dấu phân cách khác hoặc escape các khóa bị xung đột trước khi chuyển đổi.
Công cụ có xử lý được JSON rất lớn không?
Các phản hồi API và tệp cấu hình thông thường đều xử lý tốt. Với JSON quá lớn, nên chia nhỏ dữ liệu hoặc dùng CLI cục bộ như `jq` để tránh nặng trình duyệt.
Xử lý sự cố
Công cụ báo đầu vào không phải JSON hợp lệ
Nguyên nhân thường là thiếu dấu ngoặc kép, thừa dấu phẩy, quên đóng ngoặc hoặc dùng True/False kiểu Python. Hãy kiểm tra cú pháp bằng công cụ format JSON trước.
Sau khi unflatten, cấu trúc bị lệch
Có thể khóa gốc đã chứa đúng dấu phân cách bạn đang chọn. Hãy đổi dấu phân cách hoặc escape các khóa xung đột trước khi xử lý.
Sau khi bung mảng, CSV có quá nhiều cột hoặc hàng
Bung mảng theo chỉ mục sẽ tạo thêm nhiều trường. Nếu muốn bảng gọn hơn, hãy chọn giữ nguyên cả mảng như một giá trị.
JSON lớn làm trình duyệt chậm
Tệp JSON rất lớn sẽ dùng nhiều bộ nhớ. Hãy chia dữ liệu thành nhiều phần hoặc dùng công cụ cục bộ như `jq`, Python hay Node.js.
- Nén JSON
- CSV sang JSON
- JSON sang CSV
- JSON Diff
- JSON Escape / Unescape
- Làm phẳng JSON
- Trình định dạng JSON
- Trinh tao JSON
- Truy vấn JSONPath
- Gộp JSON
- Sửa JSON
- Trình Xác Thực JSON Schema
- Sắp xếp JSON
- JSON Stringify
- JSON sang HTML
- JSON sang Java
- JSON sang Markdown
- JSON sang SQL
- JSON sang TOML
- JSON sang TypeScript
- XML sang JSON
- Chuyen JSON sang XML
- YAML sang JSON
- JSON → YAML
- JSON sang Go
- JSON sang Rust
- JSON sang Swift
- JSON sang C#
- JSON sang C++
- JSON sang PHP
- JSON sang Python