Bộ chuyển đổi JSON sang XML

Dán JSON bên trái, nhận XML đúng định dạng bên phải. Khóa có tiền tố @_ trở thành thuộc tính. Không tải lên.

  1. Dán JSON vào vùng văn bản bên trái.
  2. Bấm "Chuyển sang XML". Khóa JSON trở thành phần tử; @_khóa trở thành thuộc tính.
  3. Sao chép hoặc tải xuống XML đã định dạng.
  4. Bao bọc dữ liệu của bạn với một khóa gốc duy nhất — XML yêu cầu một phần tử cấp cao nhất.
Công cụ này làm gì?

Chuyển đối tượng JSON sang XML theo quy ước fast-xml-parser. Thuộc tính đối tượng trở thành phần tử con; thuộc tính có tiền tố `@_` trở thành thuộc tính trên cha; mảng trở thành phần tử anh em lặp lại với cùng tên thẻ. Số, boolean và chuỗi được phát ra như nội dung văn bản. Đầu ra được thụt lề để dễ đọc.

Ví dụ

Đầu vào JSON:

{
  "root": {
    "@_version": 1,
    "name": "Ada",
    "tags": ["math", "logic"]
  }
}

Đầu ra XML:

<root version="1">
  <name>Ada</name>
  <tags>math</tags>
  <tags>logic</tags>
</root>

Cạm bẫy thường gặp khi chuyển JSON sang XML

XML nghiêm ngặt hơn JSON về cấu trúc. Các mẫu dưới đây bao gồm hầu hết các đầu ra bất ngờ.

  • Không có gốc đơn. XML yêu cầu chính xác một phần tử gốc. Đối tượng JSON có nhiều khóa cấp cao nhất tạo ra nhiều gốc, là XML không hợp lệ. Bao bọc đầu vào trong một khóa duy nhất: `{"root": {"a":1, "b":2}}`.
  • Mảng cấp cao nhất. Mảng JSON `[{"a":1},{"a":2}]` không có tên phần tử gốc để dùng. Bao bọc: `{"items": [{"a":1},{"a":2}]}`. Sau đó mỗi mục mảng trở thành một phần tử `<items>`.
  • Tên phần tử có khoảng trắng hoặc ký hiệu. Tên phần tử XML không thể chứa khoảng trắng, bắt đầu bằng chữ số, hoặc chứa `:`, `/`, `<`, v.v. Làm sạch khóa JSON trước khi chuyển — thay khoảng trắng bằng `_`, đặt chữ cái trước chữ số.
  • Thuộc tính vs. phần tử. Một khóa JSON `id` trở thành phần tử con `<id>1</id>`. Để biến nó thành thuộc tính (`<user id="1">`), đặt tiền tố `@_` cho khóa: `{"user":{"@_id":1}}`. Tiền tố bị loại bỏ ở đầu ra.
  • Giá trị null. JSON `null` trở thành phần tử rỗng (`<x/>`). Nếu bạn cần loại bỏ hoàn toàn, hãy gỡ giá trị null khỏi JSON trước khi chuyển.
  • Ký tự đặc biệt trong văn bản. XML tự động thoát `<`, `>`, `&`, `"` và `\'`. Chuỗi JSON `"<b>hi</b>"` của bạn trở thành văn bản `&lt;b&gt;hi&lt;/b&gt;`, không phải phần tử lồng nhau. Dùng cấu trúc JSON trung gian nếu bạn muốn lồng thật.
Câu hỏi thường gặp

Làm thế nào để có khai báo XML `<?xml version="1.0"?>`?

Tự đặt nó trước đầu ra — bộ chuyển đổi không phát ra khai báo. Với XML UTF-8, khai báo về mặt kỹ thuật là tùy chọn nhưng thường được đưa vào: `<?xml version="1.0" encoding="UTF-8"?>` theo sau là XML đã chuyển đổi của bạn.

Mảng JSON có được giữ như phần tử lặp lại không?

Có. `{"tags":["a","b"]}` trở thành `<tags>a</tags><tags>b</tags>` — hai anh em có cùng thẻ, đó là biểu diễn XML chuẩn của giá trị lặp lại.

Tôi có thể có mảng lồng kiểu JSON trong XML không?

Không trực tiếp. XML không có khái niệm mảng bản địa; chỉ có anh em lặp lại. Mảng lồng trong JSON trở thành cấu trúc XML phẳng hơn, nơi ngữ cảnh xác định việc nhóm. Đi vòng XML → JSON → XML qua công cụ này bảo toàn tập con có thể đi vòng.

Ngày được xử lý thế nào?

JSON không có kiểu Date — ngày thường đã là chuỗi ISO 8601. Chúng trở thành nội dung văn bản phần tử không thay đổi. Nếu XML hạ nguồn của bạn mong đợi định dạng ngày cụ thể, hãy đảm bảo JSON dùng định dạng đó.

JSON của tôi có được tải lên không?

Không. Mọi thứ chạy trong trình duyệt của bạn — đầu vào của bạn được phân tích và chuyển bởi JavaScript trên trang này và không bao giờ gửi đến máy chủ.

Đi vòng JSON → XML → JSON có giữ dữ liệu của tôi không?

Đối với dữ liệu có cấu trúc tiêu biểu với quy ước thuộc tính @_, có — về mặt ngữ nghĩa. Một số trường hợp ngóc ngách (văn bản hỗn hợp + phần tử con, thứ tự thuộc tính so với thứ tự phần tử) có thể được chuẩn hóa. Nếu sự tương đương từng byte là quan trọng, đừng đi vòng qua XML.