Cách chuyển XML sang JSON
- Dán XML, kéo thả file
.xmlvào trình soạn thảo hoặc tải từ URL. JSON xuất hiện ngay khi bạn gõ. - Điều chỉnh tiền tố thuộc tính và khóa văn bản, rồi quyết định có luôn dùng mảng, chuyển đổi số và boolean, hay bỏ qua tiền tố namespace.
- Sao chép JSON hoặc tải về dưới dạng file
.json.
Quy tắc chuyển XML sang JSON
| XML | JSON |
|---|---|
<name>Ada</name> | "name": "Ada" |
<price>9.90</price> | "price": 9.90 – giữ nguyên chính xác các chữ số |
<item id="7">Pen</item> | "item": {"@id": 7, "#text": "Pen"} |
<tag>a</tag><tag>b</tag> | "tag": ["a", "b"] |
<note/> | "note": null |
<![CDATA[a < b]]> | văn bản "a < b" |
<soap:Body> khi bật Bỏ qua tiền tố namespace | "Body" |
Vì sao tùy chọn “Luôn dùng mảng” quan trọng
Một phần tử xuất hiện một lần sẽ trở thành một giá trị đơn, nhưng khi xuất hiện hai lần nó trở thành mảng. Code đọc JSON khi đó phải xử lý cả hai dạng – một lỗi kinh điển khi danh sách đôi khi chỉ có một phần tử. Đánh dấu Luôn dùng mảng cho phần tử con để nhận mảng ở mọi nơi: cấu trúc dễ đoán hơn, đổi lại có thêm vài dấu ngoặc.
Chuyển XML sang JSON bằng code
- Python:
xmltodict.parse(text)(gói xmltodict) - JavaScript:
new XMLParser({ ignoreAttributes: false }).parse(text)(gói fast-xml-parser) - C#:
JsonConvert.SerializeXmlNode(doc)(Newtonsoft.Json) - Dòng lệnh:
yq -p xml -o json file.xml
Câu hỏi thường gặp
Chuyển đổi có làm mất dữ liệu không?
Tên phần tử, thuộc tính và văn bản được giữ nguyên, và số giữ đúng từng chữ số. Chú thích, chỉ thị xử lý và vị trí của văn bản nằm giữa các phần tử con (nội dung hỗn hợp) không thể biểu diễn trong JSON.
Có thể chuyển JSON ngược lại sang XML không?
Có, với công cụ chuyển JSON sang XML trên trang web chị em JSON Formatter, sử dụng cùng quy ước @ và #text.
Namespace được xử lý thế nào?
Theo mặc định, tên có tiền tố như soap:Body được giữ nguyên làm khóa, và các khai báo xmlns xuất hiện dưới dạng thuộc tính. Đánh dấu Bỏ qua tiền tố namespace để nhận tên đơn giản như Body mà không có các khai báo.
Tại sao một giá trị là chuỗi thay vì số?
Các giá trị như 007 hoặc 1,000 không phải số thập phân thông thường, nên chúng được giữ dạng chuỗi để tránh mất dữ liệu. Bỏ chọn Chuyển đổi số và true/false để giữ mọi giá trị ở dạng chuỗi.