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

  1. Dán JSON vào khung bên trái, tải ví dụ hoặc nhập tệp .json
  2. 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
  3. Nhấn nút sắp xếp và kiểm tra kết quả ở khung bên phải
  4. 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

python
import 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ốngSắp theoCách khuyến nghịCông cụ
Giảm nhiễu Git DiffKhóa objectSắp khóa đệ quyCông cụ này / jq -S
Chuẩn hóa cấu hìnhKhóa objectTăng dần + đệ quyCông cụ này
Ổn định khóa cache APIKhóa objectSắp rồi mới stringifyCông cụ này / ví dụ code
Dọn nhanh dữ liệu mảngPhần tử mảngChế độ mảngCông cụ này

Khi nào dùng Sort, Diff hay Merge

Công cụMục đíchThứ được sắpBước tiếp theo
Sắp xếp JSONThống nhất thứ tựKhóa / mảngDiff, format
JSON DiffSo sánh khác biệtKhông cóTốt nhất sau khi sắp
JSON MergeGhép nhiều nguồnCó thể sắp sau mergeSắp sau khi ghép
JSON RepairSửa JSON không hợp lệKhông cóSắp sau khi sửa

Authoritative References