XML ⇄ JSON
Dán một trong hai định dạng — định dạng kia hiện ra khi bạn gõ, cả hai chiều.
Cách sử dụng
- Dán XML hoặc JSON vào ô — kết quả được vẽ ngay khi bạn gõ, không cần nhấn nút. Chiều chuyển được nhận từ ký tự đầu tiên (< cho XML, [ hoặc { cho JSON) và hiển thị phía trên kết quả để bạn kiểm tra.
- Nếu chiều chuyển bị đoán sai, hãy chọn XML → JSON hoặc JSON → XML. Các tùy chọn bên dưới thay đổi theo chiều: XML → JSON hiện “Nhận diện số & boolean”, còn JSON → XML hiện “Tên phần tử gốc” để bọc mảng.
- Sao chép hoặc tải xuống kết quả. Cả hai đều dùng đúng văn bản bạn thấy trên màn hình; tệp được đặt tên data.json hoặc data.xml. “Tải mẫu” điền ví dụ theo chiều đang bật.
Ví dụ
Đầu vào (XML)
<note id="1"><to>An</to><from>Bình</from><body>Chào!</body></note>
Kết quả (JSON)
{ "note": { "@id": "1", "to": "An", "from": "Bình", "body": "Chào!" } }
Thuộc tính id thành “@id”, mỗi phần tử con thành một khóa, và văn bản bên trong <body> thành giá trị chuỗi. Tắt “Nhận diện số & boolean” để giữ mọi giá trị — kể cả id — dưới dạng văn bản.
Quy tắc, giới hạn và các vấn đề đã biết
- Không tải tệp lên, không kéo thả, không lấy từ URL: hãy dán văn bản vào. Vùng kéo thả sẽ chiếm mất chiều cao cần cho kết quả, còn đọc tệp đúng cách nghĩa là phải xử lý các bảng mã không phải UTF-8 — hãy mở tệp trong công cụ định dạng XML (GB18030, Big5, Windows-1256) rồi sao chép văn bản.
- Đầu vào giới hạn 1.000.000 ký tự; trên 200.000 ký tự kết quả chờ đến khi bạn ngừng gõ và báo rõ. Vượt giới hạn cứng bạn nhận lỗi rõ ràng — đầu vào không bao giờ bị cắt âm thầm.
- Ánh xạ được cố định có chủ đích: phần tử thành đối tượng; thuộc tính thành “@tên”; văn bản của phần tử thành “#text”; phần tử con thành một khóa; và nhiều phần tử con cùng tên thành một mảng. Phần tử lá chỉ có văn bản thành chuỗi trơn, nên tài liệu lồng sâu vẫn dễ đọc.
- Nhận diện kiểu (XML → JSON) thận trọng: chỉ true / false / null (chữ thường) và số JSON nghiêm ngặt được chuyển thành kiểu thật. Số nguyên có số 0 đầu (00501) và số từ 16 chữ số trở lên giữ dạng chuỗi; mọi thứ khác giữ dạng văn bản khi tắt tùy chọn. Thuộc tính luôn giữ dạng văn bản, không bao giờ đổi kiểu, vì thuộc tính XML vốn là văn bản.
- JSON → XML cần một gốc duy nhất, nên đối tượng cấp cao nhất dùng khóa duy nhất của nó làm phần tử gốc. Mảng JSON cấp cao nhất không có gốc duy nhất và được bọc trong phần tử “Tên phần tử gốc”, mỗi mục thành một phần tử con lặp lại (mặc định tên là “item”).
- Giá trị JSON dưới một khóa có thể là đối tượng, mảng, chuỗi, số, true / false hoặc null. Khóa “@tên” thành thuộc tính (null / undefined bị bỏ qua); “#text” thành văn bản của phần tử; mọi khóa khác thành phần tử con. Mảng tạo ra các phần tử lặp lại.
- Chú thích XML, chỉ thị xử lý (<? … ?>) và DOCTYPE bị bỏ và được đếm (không thể biểu diễn trong JSON); CDATA được giữ dưới dạng văn bản. Nội dung trộn — văn bản nằm cạnh phần tử con — được làm phẳng vào “#text” và thứ tự gốc không được giữ; các phần tử bị ảnh hưởng được đếm để bạn thấy.
- JSON được phân tích nghiêm ngặt: không chú thích, không dấu phẩy thừa, không nháy đơn, không ký tự điều khiển chưa escape, lồng tối đa 64 cấp. Mỗi dòng một đối tượng (JSON Lines) không được chấp nhận — hãy bọc các đối tượng trong một mảng trước.
- Tham chiếu thực thể XML (& < >) được giữ nguyên trong văn bản và thuộc tính (không giải mã), nên một vòng chuyển đổi tái tạo đúng từng byte. Việc escape được thêm ở phía JSON → XML: & < > được escape trong văn bản, và “ được escape trong giá trị thuộc tính.
- Ngoài phạm vi: XSLT, XPath, kiểm tra XML Schema, không gian tên ngoài việc là một phần của tên thẻ, JSON có khóa trùng (khóa cuối thắng, giống JSON.parse), và giữ thứ tự chú thích. Không tải lên, không lưu trữ, không đưa vào URL.
Công cụ liên quan
Việc thường làm tiếp theo khi dữ liệu đã ở định dạng kia.