Sắp xếp JSON
Sắp lại khóa của object JSON và phần tử mảng để dữ liệu dễ đọc, dễ so sánh và ổn định hơn khi lưu trữ. Mọi xử lý diễn ra cục bộ trong trình duyệt.
Đề xuất Liên quan
Sắp xếp JSON là gì?
Sắp xếp JSON là việc đưa các khóa của object về một thứ tự nhất quán hoặc sắp lại các phần tử trong mảng theo giá trị. Thao tác này không đổi dữ liệu hay kiểu dữ liệu, chỉ đổi vị trí hiển thị.
Việc chuẩn hóa này giúp giảm nhiễu trong Git Diff, thống nhất tệp cấu hình, chuẩn bị dữ liệu trước khi dùng JSON Diff và ổn định khóa cache của phản hồi API. Cùng một JSON sẽ không còn trông như thay đổi chỉ vì thứ tự khóa khác nhau.
Công cụ của GeekFormat hỗ trợ hai chế độ: sắp khóa và sắp mảng, cùng với tùy chọn tăng dần/giảm dần và xử lý đệ quy. Dữ liệu không bị gửi lên máy chủ.
Trường hợp sử dụng
- Đồng nhất thứ tự khóa trong package.json, tsconfig.json và các tệp cấu hình khác
- Sắp cả hai JSON trước khi so sánh để loại bỏ khác biệt giả chỉ do thứ tự
- Ổn định thứ tự khóa trong phản hồi API cho cache, hash và snapshot
- Dọn các tệp JSON lớn trước khi review code hoặc audit cấu hình
- Chuẩn bị dữ liệu sau merge hoặc repair trước khi tiếp tục xác thực
Cách Sử dụng
- Dán JSON vào khung bên trái, tải ví dụ hoặc nhập tệp .json
- Chọn chế độ sắp khóa hoặc sắp mảng, rồi đặt chiều sắp và tùy chọn đệ quy
- Nhấn nút sắp xếp và kiểm tra kết quả ở khung bên phải
- Sao chép kết quả hoặc tải xuống dưới dạng sorted.json
Tính năng
- Hai chế độ: sắp khóa object và sắp phần tử mảng
- Hỗ trợ đệ quy: tự động đồng bộ thứ tự cả trong object lồng nhau
- Tăng dần và giảm dần: đổi hướng sắp xếp chỉ với một lần bấm
- Giữ nguyên cấu trúc: giá trị và kiểu dữ liệu không thay đổi
- Xử lý cục bộ: JSON không rời khỏi trình duyệt
- Dễ nối tiếp công việc: kết quả có thể chuyển sang JSON Diff, Repair hoặc Format
Ví dụ mã
Sắp khóa đệ quy bằng JavaScript
javascript// Sắp khóa đệ quy và trả về object mới
function sortKeysDeep(value) {
if (Array.isArray(value)) return value.map(sortKeysDeep);
if (value !== null && typeof value === 'object') {
return Object.keys(value)
.sort((a, b) => a.localeCompare(b))
.reduce((acc, k) => {
acc[k] = sortKeysDeep(value[k]);
return acc;
}, {});
}
return value;
}
const data = { zoo: { animals: ['zebra', 'elephant'] }, alpha: 1, beta: 2 };
console.log(JSON.stringify(sortKeysDeep(data), null, 2));Dùng sort_keys=True trong Python
pythonimport json
data = {"zoo": {"animals": ["zebra", "elephant"]}, "alpha": 1, "beta": 2}
print(json.dumps(data, indent=2, sort_keys=True, ensure_ascii=False))
arr = [3, 1, 4, 1, 5]
print(sorted(arr))
print(sorted(arr, reverse=True))Sắp xếp JSON bằng jq
bash# Sắp khóa theo kiểu đệ quy jq -S '.' data.json # Sắp phần tử mảng jq 'sort' data.json # Sắp theo trường cụ thể jq 'sort_by(.age)' data.json
Câu hỏi Thường gặp
Sắp xếp JSON khác gì so với format JSON?
Format chỉ đổi thụt lề và xuống dòng, còn sắp xếp JSON thay đổi thứ tự khóa và phần tử mảng. Dùng cả hai sẽ giúp JSON vừa gọn thứ tự vừa dễ đọc.
Sau khi sắp xếp, JSON có lớn hơn không?
Hầu như không. Lượng dữ liệu vẫn giữ nguyên, chỉ có thứ tự của các trường và phần tử thay đổi.
Giá trị hoặc kiểu dữ liệu có bị đổi không?
Không. `null`, số, chuỗi, boolean, object và mảng vẫn được giữ nguyên hoàn toàn.
Sắp xếp đệ quy nghĩa là gì?
Đó là sắp không chỉ object ngoài cùng mà còn cả các object nằm bên trong. Với cấu hình và phản hồi API, thường nên bật tùy chọn này.
Vì sao các khóa giống số nguyên lại xuất hiện ở đầu?
JavaScript xử lý các khóa như `0`, `1`, `2` theo thứ tự số. Đây là hành vi của nền tảng chứ không phải lỗi của công cụ.
Các object trong mảng được sắp như thế nào?
Chế độ mảng dùng cách so sánh tổng quát dựa trên biểu diễn chuỗi. Nếu muốn sắp theo trường cụ thể như `price` hay `date`, bạn nên dùng `sort_by(.field)`.
JSON có bị tải lên máy chủ không?
Không. Tất cả thao tác diễn ra trong trình duyệt nên phù hợp cả với dữ liệu nhạy cảm.
Nên dùng công cụ này cùng JSON Diff hoặc Schema theo thứ tự nào?
Thường nên theo chuỗi JSON Repair → Sắp xếp JSON → JSON Diff / Format → kiểm tra Schema. Sắp trước sẽ giúp giảm nhiễu khi so sánh.
Xử lý sự cố
Xuất hiện lỗi Invalid JSON
Dữ liệu đầu vào có thể sai cú pháp. Hãy kiểm tra trước bằng JSON Repair hoặc JSON Format.
Các khóa dạng số luôn đứng đầu
JavaScript xử lý các khóa giống số nguyên theo thứ tự số. Đây là hành vi của nền tảng, không phải lỗi của công cụ.
Object trong mảng không ra thứ tự tôi muốn
Chế độ mảng không hiểu ý nghĩa trường nghiệp vụ và dùng so sánh tổng quát. Với `price` hoặc `date`, nên dùng `sort_by`.
Object lồng nhau không được sắp
Hãy kiểm tra xem tùy chọn đệ quy có bật hay không. Nếu tắt, công cụ chỉ sắp tầng trên cùng.
JSON rất lớn làm trình duyệt chậm
Các tệp lớn nên xử lý trước bằng `jq`, Python hoặc Node.js rồi mới đưa vào trình duyệt để kiểm tra kết quả.
Thuật ngữ
- JSON Sort
- Thao tác chỉ thay đổi thứ tự của khóa hoặc phần tử mảng mà không sửa giá trị hay kiểu dữ liệu.
- Recursive Sort
- Sắp xếp không chỉ ở tầng ngoài cùng mà còn áp dụng cho mọi object lồng nhau bên trong.
- Ascending / Descending
- Tăng dần là A-Z hoặc từ nhỏ đến lớn, giảm dần là thứ tự ngược lại.
- Canonical Form
- Biểu diễn JSON đã được chuẩn hóa để tiện so sánh, cache và tạo hash.
- Git Diff Noise
- Những dòng diff thừa sinh ra vì thứ tự hoặc định dạng, không phải vì dữ liệu thật sự thay đổi.
- localeCompare
- API so sánh chuỗi trong JavaScript, thường dùng để sắp xếp tên khóa theo thứ tự từ điển.
Những tình huống thường cần sắp xếp JSON
| Tình huống | Sắp theo | Cách khuyến nghị | Công cụ |
|---|---|---|---|
| Giảm nhiễu Git Diff | Khóa object | Sắp khóa đệ quy | Công cụ này / jq -S |
| Chuẩn hóa cấu hình | Khóa object | Tăng dần + đệ quy | Công cụ này |
| Ổn định khóa cache API | Khóa object | Sắp rồi mới stringify | Công cụ này / ví dụ code |
| Dọn nhanh dữ liệu mảng | Phần tử mảng | Chế độ mảng | Công cụ này |
Khi nào dùng Sort, Diff hay Merge
| Công cụ | Mục đích | Thứ được sắp | Bước tiếp theo |
|---|---|---|---|
| Sắp xếp JSON | Thống nhất thứ tự | Khóa / mảng | Diff, format |
| JSON Diff | So sánh khác biệt | Không có | Tốt nhất sau khi sắp |
| JSON Merge | Ghép nhiều nguồn | Có thể sắp sau merge | Sắp sau khi ghép |
| JSON Repair | Sửa JSON không hợp lệ | Không có | Sắp sau khi sửa |
Authoritative References
- 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