Chuyển đổi từ JSON sang XML

Dán một tài liệu JSON và nhận lại XML tương đương với tên phần tử gốc mà bạn chọn, một chiến lược nhất quán cho mảng (các phần tử lặp lại hoặc một cấu trúc bao bọc), khai báo XML tùy chọn cùng phần thụt lề gọn gàng. Rất hữu ích khi một hệ thống cũ yêu cầu XML trong khi dữ liệu nguồn của bạn được lưu ở dạng JSON.

Cách chuyển đổi JSON sang XML

  1. 1

    Dán JSON

    Đối tượng hoặc mảng ở cấp cao nhất. Bạn sẽ đặt tên cho phần tử gốc.

  2. 2

    Đặt tên cho phần tử gốc

    XML yêu cầu một phần tử gốc duy nhất. Giá trị mặc định là `<root>`; hãy đặt một tên có ý nghĩa như `<users>` hoặc `<response>`.

  3. 3

    Chọn chiến lược cho mảng

    "Phần tử lặp lại" (mỗi mục trong mảng trở thành một `<item>` cùng cấp) hoặc "bao bọc" (mảng được đặt bên trong một phần tử bao bọc có tên).

  4. 4

    Sao chép XML

    Khai báo XML tùy chọn, phần thụt lề đúng cách và các giá trị được thoát thực thể (entity-escape) cho `<`, `>`, `&` và dấu ngoặc kép.

Ví dụ: các phần tử lặp lại

Nội dung đầu vào:

{ "users": [ { "name": "Alice" }, { "name": "Bob" } ] }

Kết quả đầu ra:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <users>
    <name>Alice</name>
  </users>
  <users>
    <name>Bob</name>
  </users>
</root>

Ví dụ: phần tử bao bọc mảng

Cùng dữ liệu đầu vào với chiến lược “bao bọc mảng trong <item>”:

<root>
  <users>
    <item>
      <name>Alice</name>
    </item>
    <item>
      <name>Bob</name>
    </item>
  </users>
</root>

Xác định kiểu dữ liệu

JSON XML
chuỗi nội dung văn bản, đã được mã hóa theo chuẩn thực thể
số nguyên / số thập phân nội dung văn bản (không có ghi chú kiểu XML)
boolean true / false dưới dạng văn bản
null phần tử trống (<foo/>) hoặc bị bỏ qua
mảng các phần tử lặp lại hoặc cấu trúc bao bọc cùng các mục
đối tượng phần tử lồng có các phần tử con

Thuộc tính và phần tử

XML phân biệt giữa các thuộc tính (<user id="1">) và các phần tử con (<user><id>1</id></user>). Bộ chuyển đổi mặc định sử dụng phần tử – chúng không làm mất dữ liệu khi chuyển đổi qua lại. Nếu XML ở bước sau yêu cầu thuộc tính, hãy áp dụng quy ước tiền tố cho khóa:

  • Khóa JSON @id trở thành thuộc tính XML id="..." trên phần tử cha.
  • Khóa JSON #text trở thành nội dung văn bản của phần tử cha.

Các quy ước này bắt nguồn từ các phương thức ánh xạ của BadgerFishParker – hai tiêu chuẩn phổ biến nhất để chuyển đổi từ JSON sang XML.

Quy tắc thoát (escape)

  • < -> &lt;
  • > -> &gt;
  • & -> &amp;
  • "&quot; (trong các giá trị thuộc tính)
  • '&apos; (tùy chọn) Các byte trong định dạng UTF-8 được giữ nguyên và được xác định trong phần mở đầu XML.

Các lỗi phổ biến

  • Mảng JSON ở cấp độ gốc: XML yêu cầu phải có một phần tử gốc duy nhất. Bộ chuyển đổi sẽ đóng gói mảng này dưới dạng định dạng <root> (hoặc bất kỳ tên nào bạn chọn).
  • Các khóa số: JSON {"1": "a"} là hợp lệ; tên các phần tử XML không được bắt đầu bằng chữ số. Bộ chuyển đổi sẽ thêm dấu gạch dưới vào chữ số để tạo tiền tố (ví dụ: _1) hoặc cho phép bạn định nghĩa mối tương ứng tùy chỉnh.
  • Mảng hỗn hợp: [1, "two", { "x": true }] không có bản ánh xạ rõ ràng. Thông thường, điều này có nghĩa là dữ liệu JSON cần được chuẩn hóa trước khi chuyển đổi. – Các tài liệu có dung lượng lớn: XML rất chi tiết; một tệp JSON dung lượng 10 MB có thể trở thành một tệp XML lên tới 20–30 MB. Cần xem xét phương pháp chuyển đổi theo luồng đối với các dữ liệu có kích thước cực lớn.

Câu hỏi thường gặp

Theo quy định, XML yêu cầu chỉ một phần tử gốc duy nhất. Nếu dữ liệu JSON của bạn là một mảng hoặc có nhiều khóa cấp cao nhất, công cụ chuyển đổi sẽ bao tất cả các thành phần vào một phần tử gốc mà bạn có thể đặt tên tùy ý (tên mặc định là <root>).

Đúng vậy. Hãy sử dụng quy ước tiền tố @ trong các khóa JSON của bạn (ví dụ: "@id": 1); những khóa này sẽ trở thành thuộc tính, trong khi các khóa khác vẫn giữ nguyên tư cách là phần tử con. Cách thức này phù hợp với cách ánh xạ của BadgerFish.

Có hai chiến lược: các phần tử cùng cấp lặp lại (mỗi mục lấy khóa cha làm thẻ) hoặc một phần tử bao bọc chứa các phần tử <item> bên trong. Hãy chọn cách phù hợp với lược đồ XML mà bạn đang nhắm tới.

Không. Bộ chuyển đổi sẽ xuất thông tin khai báo XML (<?xml version="1.0"?>), nhưng không xuất loại dữ liệu (DOCTYPE). Đối với các file XML yêu cầu tham chiếu DTD hoặc XSD, hãy thêm chúng thủ công sau khi hoàn thành quá trình chuyển đổi.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác