Chuyển đổi từ XML sang JSON

XML và JSON mô hình hóa dữ liệu theo những cách khác nhau: XML có thuộc tính và nội dung hỗn hợp, còn JSON có đối tượng và mảng. Để chuyển đổi mà không mất dữ liệu cần một quy ước. Công cụ này cung cấp ba quy ước: compact (loại bỏ thuộc tính), Badgerfish (đặt thuộc tính dưới @key, văn bản dưới $) và literal (mọi nút XML đều trở thành một đối tượng JSON với độ trung thực hoàn toàn). Hãy chọn quy ước phù hợp với bên tiêu thụ JSON mà bạn nhắm tới.

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

  1. 1

    Dán XML

    Bất kỳ XML hợp lệ nào. Các không gian tên được bảo toàn.

  2. 2

    Chọn kiểu chuyển đổi

    Compact, Badgerfish hoặc literal/không mất dữ liệu.

  3. 3

    Xử lý mảng

    Buộc một số phần tử nhất định luôn là mảng (có thể cấu hình).

  4. 4

    Sao chép kết quả JSON

    In đẹp hoặc thu gọn, tùy bạn chọn.

So sánh ba kiểu

Đầu vào:

<book id="1" lang="en">
  <title>1984</title>
  <author>Orwell</author>
</book>

Compact (loại bỏ thuộc tính):

{
  "book": {
    "title": "1984",
    "author": "Orwell"
  }
}

Badgerfish (thuộc tính nằm dưới @, văn bản nằm dưới $):

{
  "book": {
    "@id": "1",
    "@lang": "en",
    "title": { "$": "1984" },
    "author": { "$": "Orwell" }
  }
}

Literal / giống JsonML (độ trung thực hoàn toàn):

{
  "book": {
    "@attributes": { "id": "1", "lang": "en" },
    "title": "1984",
    "author": "Orwell"
  }
}

Mảng bắt buộc

XML không có cách nào để nói “đây là một danh sách gồm một phần tử”. Một chuỗi chỉ chứa một phần tử trông giống hệt như một giá trị vô hướng (scalar):

<items>
  <item>A</item>
</items>

Nó có thể được tuần tự hóa thành {"item": "A"} hoặc {"item": ["A"]}. Bộ chuyển đổi cho phép bạn đánh dấu tên phần tử (theo XPath) để luôn là mảng, nhờ đó bên tiêu thụ JSON ở phía sau nhận được các kiểu dữ liệu nhất quán.

Nội dung hỗn hợp

Nội dung hỗn hợp – văn bản xen kẽ với các phần tử con – chính là chỗ duy nhất mà mọi quá trình chuyển đổi từ XML sang JSON đều mất thông tin:

<p>Hello <em>world</em>!</p>

Hầu hết các kiểu đều loại bỏ hoặc gộp văn bản lại. Kiểu literal giữ nguyên thứ tự thông qua một mảng:

{
  "p": {
    "@content": ["Hello ", { "em": "world" }, "!"]
  }
}

Suy luận kiểu

Theo mặc định, các giá trị là chuỗi. Bật tùy chọn “phân tích số/boolean” và bộ chuyển đổi sẽ ép 42, 3.14, true, false thành các kiểu JSON tương ứng. Hãy lưu ý: thuộc tính XML id="007" sẽ trở thành 7 khi bật ép kiểu, điều mà bạn rất có thể không mong muốn.

Khi nào nên chọn kiểu nào

  • Compact: dành cho JSON dễ đọc với con người, khi các thuộc tính chỉ là nhiễu.
  • Badgerfish: khi bạn cần thuộc tính và văn bản ở cùng độ sâu với các phần tử con.
  • Literal: khi bạn phải chuyển đổi ngược về XML mà không mất dữ liệu.

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

Khi một phần tử chỉ xuất hiện một lần, bộ chuyển đổi mặc định dùng đối tượng; nếu xuất hiện hai lần trở lên thì dùng mảng. Hãy dùng tùy chọn buộc thành mảng để đảm bảo nhất quán nếu bên tiêu thụ của bạn kỳ vọng một hình dạng duy nhất.

Các tiền tố không gian tên được giữ nguyên trong khóa (ns:title), trừ khi bạn bật tùy chọn “loại bỏ không gian tên”. Bản thân các khai báo sẽ trở thành thuộc tính @xmlns:ns trên phần tử gốc.

Chế độ literal là gần nhất với việc không mất dữ liệu, tuy nhiên thứ tự của nội dung hỗn hợp giữa các phần tử và văn bản khá phức tạp. Chế độ compact chắc chắn sẽ làm mất các thuộc tính. Badgerfish là giải pháp trung gian thực dụng.

Không. Quá trình chuyển đổi sẽ được thực hiện trực tiếp trong trình duyệt của bạn.

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