← Tất cả công cụ

Chuyển Đổi JSON sang XML

Chuyển đổi JSON sang XML và XML sang JSON tức thì trong trình duyệt. Cục bộ và riêng tư, kèm ghi chú về attributes, arrays, namespaces và các lưu ý.

JSON sang XML và ngược lại: công cụ chuyển đổi thực tế cho hai thế giới dữ liệu

Hầu hết lập trình viên làm việc với cả XML lẫn JSON dù muốn hay không. API web hiện đại nói JSON gần như hoàn toàn, nhưng ngay khi bạn chạm đến ngân hàng, công ty bảo hiểm, điểm cuối chính phủ, ERP doanh nghiệp, hoặc dịch vụ SOAP cũ, XML lại xuất hiện. Công cụ JSON sang XML trên trang này chuyển đổi JSON thành XML và XML trở lại JSON ngay trong trình duyệt của bạn, vì vậy bạn có thể di chuyển giữa hai định dạng mà không cần sao chép payload nhạy cảm vào dịch vụ từ xa.

Dấu ngoặc JSON lồng nhau phát sáng đang chuyển đổi thành cây thẻ XML trong ngoặc trên nền xanh chàm tối
Đối tượng JSON và cây thẻ XML mô tả cùng dữ liệu với các hình dạng khác nhau.

XML và JSON thực sự là gì

XML (Extensible Markup Language) là định dạng đánh dấu được xây dựng xung quanh các thẻ lồng nhau, thuộc tính và namespace. Nó được thiết kế cho tài liệu và trao đổi dữ liệu có cấu trúc, và mang nhiều cơ chế: schema (XSD), namespace, processing instruction, chú thích, phần CDATA và khai báo chính thức ở đầu. Sự phong phú đó là lý do tại sao XML vẫn chiếm ưu thế trong các hệ thống cũ và doanh nghiệp. Bạn tìm thấy nó trong dịch vụ web SOAP, nguồn RSS và Atom, tệp cấu hình (Spring, Maven, .NET app config), định dạng tài liệu office, và các tiêu chuẩn tin nhắn tài chính như SWIFT và ISO 20022, nơi các ngân hàng và công ty bảo hiểm vẫn trao đổi XML hàng ngày.

JSON (JavaScript Object Notation) đơn giản hơn nhiều: các đối tượng với cặp khóa/giá trị, mảng, chuỗi, số, boolean và null. Nó ánh xạ gần như một-một lên các cấu trúc dữ liệu của hầu hết mọi ngôn ngữ lập trình, đó chính xác là lý do tại sao nó tiếp quản API web hiện đại, REST endpoint, ứng dụng di động và tệp config như package.json. JSON thường nhỏ hơn 30 đến 50 phần trăm so với XML tương đương và phân tích nhanh hơn đáng kể, một phần vì nó bỏ các thẻ đóng và cơ chế thuộc tính làm XML rườm rà.

Những khác biệt chính quan trọng cho chuyển đổi

Hai định dạng chồng chéo đủ để ánh xạ lên nhau, nhưng không hoàn toàn. Một vài khác biệt cấu trúc gây ra hầu hết mọi ma sát:

  • Thuộc tính so với node con. XML phân biệt giữa <user id="1"> (một thuộc tính) và <user><id>1</id></user> (phần tử con). JSON không có khái niệm như vậy, vì vậy các công cụ chuyển đổi tạo ra một cái. Theo quy ước, thuộc tính được gộp vào khóa như @attributes hoặc được tiền tố bằng @, trong khi văn bản phần tử rơi vào khóa như #text.
  • Mảng. JSON có mảng gốc. XML thì không. Danh sách trong XML chỉ là cùng thẻ được lặp lại, như ba phần tử <item> liên tiếp. Các công cụ chuyển đổi phải suy ra khi nào các anh chị em lặp lại nên thu gọn thành mảng JSON, và khi nào một phần tử đơn nên ở là đối tượng thuần túy.
  • Namespace. XML dùng namespace (các tiền tố xmlns:soap) để tránh xung đột tên giữa các schema. JSON không có gì tương đương, vì vậy các tiền tố hoặc tồn tại như ký tự đen trong các khóa hoặc bị loại bỏ.
  • Độ rườm rà và metadata. XML có thể đính kèm metadata vào node thông qua thuộc tính; JSON biểu thị mọi thứ bằng khóa và giá trị. Điều đó làm JSON nhỏ gọn hơn và dễ đọc hơn, trong khi XML giữ sức mạnh xác thực thông qua XSD schema.

Những lưu ý chuyển đổi cần chú ý

Vòng khứ hồi JSON sang XML sang JSON và mong đợi kết quả giống hệt là sai lầm điển hình. Quá trình chuyển đổi có mất mát theo cả hai hướng trừ khi bạn kiểm soát các quy tắc. Hãy ghi nhớ những điều này:

  • Thuộc tính bị biến dạng. Khi bạn chuyển đổi JSON sang XML, công cụ cần quy tắc về những khóa nào trở thành thuộc tính so với phần tử. Khi bạn đi theo hướng ngược lại, thuộc tính phải đặt ở đâu đó, và "đâu đó" đó (tiền tố @, block @attributes) khác nhau giữa các thư viện. Nếu parser downstream mong đợi quy ước khác, dữ liệu trông sai ngay cả khi không có gì bị mất.
  • Phần tử đơn so với mảng. Nguồn XML với một <item> tạo ra đối tượng JSON; cùng nguồn với hai item tạo ra mảng JSON. Mã giả định mảng bị hỏng với trường hợp một item. Đây là nguồn lỗi phân tích RSS và SOAP phổ biến.
  • Namespace rò rỉ hoặc biến mất. Tùy thuộc vào công cụ, soap:Body có thể trở thành khóa mang tên đen soap:Body, hoặc tiền tố có thể bị bỏ hoàn toàn, thay đổi ý nghĩa của tài liệu.
  • Nội dung hỗn hợp và kiểu dữ liệu. XML coi mọi thứ là văn bản, vì vậy giá trị như true hoặc 42 có thể vẫn là chuỗi sau khi chuyển đổi sang JSON, trong khi hướng ngược lại không có chỗ gốc cho chú thích hay CDATA.
Hai cây dữ liệu có cấu trúc được kết nối bởi các node đánh dấu trừu tượng làm từ ánh sáng xanh lam và vàng
Ánh xạ giữa các định dạng có nghĩa là quyết định cách thuộc tính, mảng và namespace dịch.

Tại sao chuyển đổi chỉ cục bộ quan trọng

Payload JSON và XML thường là thứ nhạy cảm nhất mà lập trình viên xử lý: phản hồi API với token, tin nhắn SOAP với số tài khoản, tệp cấu hình với thông tin xác thực. Công cụ chuyển đổi chạy trong trình duyệt không bao giờ tải lên bất kỳ điều nào trong đó. Quá trình phân tích và serialization diễn ra trên máy của bạn, không có gì được gửi đến máy chủ, và bạn có thể dùng công cụ ngoại tuyến sau khi trang đã tải. Để debug dữ liệu production hoặc bất cứ thứ gì trong chế độ tuân thủ quy định, đó là sự khác biệt giữa kiểm tra nhanh an toàn và rò rỉ dữ liệu vô tình.

Nếu bạn cần dọn dẹp kết quả sau đó, hãy kết hợp với bộ chuyển đổi dữ liệu khác của chúng tôi, hoặc làm gọn đầu ra bằng công cụ định dạng JSON trước khi chuyển sang công cụ tiếp theo trong pipeline của bạn.

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

Công cụ chuyển đổi có tải JSON hoặc XML của tôi lên không?

Không. Cả chuyển đổi JSON sang XML lẫn XML sang JSON đều chạy hoàn toàn trong trình duyệt của bạn. Dữ liệu của bạn không bao giờ rời khỏi thiết bị và công cụ hoạt động ngoại tuyến sau khi trang tải.

Thuộc tính XML được xử lý như thế nào khi chuyển sang JSON?

Thuộc tính XML được đặt trong một khóa chuyên dụng, thường được tiền tố bằng ký hiệu at hoặc được nhóm trong block attributes, vì JSON không có khái niệm thuộc tính gốc. Nội dung văn bản phần tử được lưu riêng để cả hai tồn tại qua quá trình chuyển đổi.

Tại sao phần tử XML đơn của tôi trở thành đối tượng thay vì mảng?

XML không có mảng gốc, vì vậy danh sách chỉ là thẻ lặp lại. Khi chỉ có một phần tử hiện diện, các công cụ chuyển đổi không thể phân biệt nó với đối tượng thông thường, vì vậy nó trở thành đối tượng. Hai hoặc nhiều anh chị em có cùng tên thẻ thu gọn thành mảng JSON.

Điều gì xảy ra với namespace XML như soap hoặc xmlns?

JSON không có tương đương với namespace XML. Tùy thuộc vào quá trình chuyển đổi, tiền tố được giữ như văn bản đen trong khóa hoặc bị loại bỏ. Hãy kiểm tra đầu ra nếu consumer downstream của bạn phụ thuộc vào tiền tố namespace.

Tôi có thể chuyển JSON trở lại XML và nhận tài liệu gốc không?

Không phải lúc nào cũng chính xác. Quá trình chuyển đổi có mất mát theo cả hai hướng vì các tính năng XML như chú thích, CDATA và sự phân biệt thuộc tính so với phần tử không có tương đương JSON rõ ràng. Vòng khứ hồi hoạt động tốt nhất khi bạn kiểm soát các quy tắc đặt tên ở cả hai phía.

XML vẫn được dùng ở đâu so với JSON?

XML tồn tại trong các hệ thống cũ và doanh nghiệp: dịch vụ web SOAP, nguồn RSS và Atom, tệp cấu hình, và tin nhắn tài chính như SWIFT và ISO 20022. JSON chiếm ưu thế trong API web hiện đại, REST endpoint và ứng dụng di động.