Trình Chuyển Đổi JSON Sang XML

Chuyển đổi dữ liệu JSON sang định dạng XML. Dán JSON của bạn vào bên trái để nhận đầu ra XML được định dạng tốt.

JSON đầu vào

Đầu ra XML

JSON so với XML

XML (Extensible Markup Language) được W3C chuẩn hóa thành Recommendation ngày 10 tháng 2 năm 1998, đặc tả W3C XML 1.0, do Tim Bray, Jean Paoli và C.M. Sperberg-McQueen biên tập. XML xuất phát từ SGML (Standard Generalised Markup Language cũ hơn, ISO 8879:1986) bằng cách bỏ bớt các tính năng phức tạp nhất và tạo ra một thứ web có thể dùng được trên thực tế. Trong khoảng thập niên đầu thế kỷ 21, XML là định dạng được giả định cho mọi trao đổi dữ liệu có cấu trúc, dịch vụ web SOAP, RSS feed (RSS 2.0, Dave Winer, 2002), Atom (RFC 4287, 2005), các định dạng Open XML của Microsoft Office (.docx/.xlsx/.pptx, ISO/IEC 29500:2008), layout XML của Android, tệp properties Java, cấu hình trong gần như mọi framework phía server. Điểm mạnh của XML gồm namespace, thuộc tính, nội dung trộn (văn bản và phần tử con xen kẽ) và một hệ sinh thái schema phong phú (DTD, XML Schema 1.1, Relax NG). Điểm yếu của nó là sự dài dòng, mỗi giá trị mang một thẻ mở và một thẻ đóng.

JSON (JavaScript Object Notation) được Douglas Crockford đặc tả năm 2001, trang json.org và bài viết gốc "JSON: The Fat-Free Alternative to XML". JSON cố ý là một tập con của cú pháp literal đối tượng JavaScript: object, array, string, number, true/false/null. Được chuẩn hóa thành RFC 4627 tháng 7 năm 2006, tinh chỉnh trong RFC 7159 (tháng 3 năm 2014) và RFC 8259 (tháng 12 năm 2017, chuẩn STD 90 hiện hành, cũng được ECMA công bố là ECMA-404). Việc JSON chinh phục API web bằng cái giá của XML diễn ra đại khái 2008-2014, trùng với sự lên ngôi của ứng dụng SPA và kỷ nguyên API di động. Hôm nay gần như mọi API công khai đều tự tài liệu bằng JSON; XML chủ yếu sống trong tích hợp doanh nghiệp, định dạng tài liệu, tệp cấu hình và các định dạng feed. Cả hai định dạng vẫn được dùng tích cực vì chúng mã hóa tốt các thứ khác nhau: JSON hợp với dữ liệu có cấu trúc với kiểu đơn giản và hình dạng đoán được; XML hợp với tài liệu có nội dung trộn, thuộc tính, namespace và schema chặt chẽ.

Khi nào bạn thực sự cần chuyển JSON sang XML

Bản đồ chuyển đổi, nơi thông tin sống sót và nơi nó mất

JSON và XML có các nguyên thủy cấu trúc khác nhau, nên mọi việc chuyển đổi đều phải đưa ra lựa chọn. Bản đồ JSON-sang-XML chuẩn mà phần lớn bộ chuyển đổi (kể cả công cụ này) tuân theo:

Thông tin mất trong chuyển đổi: phân biệt giữa số và chuỗi của JSON, phân biệt giữa true/false và chuỗi "true"/"false" của JSON, phân biệt mảng và object của JSON (khi mảng trở thành các phần tử lặp lại, từ XML không thể nói được nguồn có một mảng một phần tử hay một giá trị đơn). Thông tin tiềm năng có được nhưng không được dùng bởi các bộ chuyển đổi đơn giản: thuộc tính XML (một object JSON có thể ánh xạ khóa sang thuộc tính thay vì phần tử con), namespace XML (JSON không có gì tương đương), section CDATA (để nhúng văn bản chứa ký tự đặc biệt của XML). Để có chuyển đổi JSON-sang-XML an-toàn-hai-chiều giữ kiểu, quy ước BadgerFish hoặc quy ước Parker mã hóa kiểu JSON thành thuộc tính XML có namespace, công cụ này tạo ra dạng đơn giản hơn, dễ đọc hơn thay vì dạng an-toàn-hai-chiều.

Ràng buộc tên thẻ XML mà khóa JSON không có

Khóa của object JSON là chuỗi tùy ý, mọi Unicode đều được phép. Tên phần tử XML hạn chế hơn nhiều: phải bắt đầu bằng chữ cái hoặc dấu gạch dưới (không phải chữ số, dấu gạch ngang hay dấu chấm), có thể chứa chữ cái, chữ số, dấu gạch ngang, dấu gạch dưới và dấu chấm (không có khoảng trắng, không có hầu hết dấu câu), phân biệt hoa thường, và không được bắt đầu bằng tiền tố dành riêng xml ở bất kỳ tổ hợp hoa thường nào. Khóa JSON có khoảng trắng ("first name": "Alice"), khóa bắt đầu bằng chữ số ("3rd_choice"), hoặc khóa có ký tự đặc biệt ("@type", "$value") không thể dùng trực tiếp làm tên phần tử XML. Phần lớn bộ chuyển đổi (kể cả công cụ này) âm thầm biến dạng các ký tự không hợp lệ, đổi khoảng trắng thành dấu gạch dưới, tiền tố hóa khóa bắt đầu bằng chữ số bằng dấu gạch dưới, bỏ phần lớn dấu câu. Hãy lưu ý điều này khi đi vòng tròn: một tài liệu JSON có khóa không-XML-an-toàn sẽ không đi vòng tròn nguyên vẹn qua XML.

Nơi XML vẫn ngự trị năm 2026

XML không lùi bước trong năm 2026, nó chỉ ổn định trong các ngách cụ thể. Định dạng tài liệu: Office Open XML (Microsoft Office), OpenDocument (LibreOffice), ebook EPUB, SVG (W3C Recommendation 4 tháng 9 năm 2001), MathML, XHTML. Cấu hình: Java application server, Spring XML context, POM của Maven, resource XML Android, app.config và web.config của .NET. Feed: RSS 2.0, Atom 1.0 (RFC 4287), feed podcast (mở rộng RSS của iTunes). Trao đổi y tế và chính phủ: HL7 v3, FHIR (nay đề xuất JSON như giải pháp thay thế nhưng dạng XML vẫn được dùng rộng rãi), DocBook, NewsML, ngân hàng ISO 20022. Cơ quan tiêu chuẩn: gần như mọi ví dụ đặc tả của IETF và W3C đều dùng XML. Sự dài dòng của XML là tính năng trong các lĩnh vực này: nó tự mô tả, việc xác thực theo schema được thiết lập tốt, và biến đổi XSLT giữa các phương ngữ XML là bộ công cụ trưởng thành. Định dạng này sẽ không đi đâu cả, chuyển JSON-sang-XML là cây cầu giữa tooling dữ liệu hiện đại và những hệ thống XML-bản-địa đã thiết lập đó.

Quyền riêng tư: chuyển đổi chỉ trong trình duyệt

JSON dán vào một bộ chuyển đổi thường chứa dữ liệu production thật, phản hồi API có định danh người dùng, ID thực thể nội bộ tiết lộ phân loại kinh doanh, giá trị cấu hình bao gồm URL endpoint và feature flag, token, nội dung nháp chưa công bố. Bộ chuyển đổi phía server lấy một bản sao của mọi đầu vào vào log của họ. Bộ chuyển đổi này phân tích JSON của bạn bằng JSON.parse() tích hợp của trình duyệt, đi qua cây object kết quả trong JavaScript và phát ra XML dưới dạng chuỗi, tất cả trong tab trình duyệt của bạn. Hãy kiểm chứng trong tab Network của DevTools khi bấm Convert (không request nào được gửi đi), hoặc đặt trang offline (chế độ máy bay) sau khi đã tải xong và bộ chuyển đổi vẫn hoạt động. An toàn cho phản hồi API production, cấu hình nội bộ, nội dung nháp, hoặc bất kỳ JSON nào bạn không muốn bị sao vào ổ cứng của người lạ.

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

Mảng JSON được chuyển đổi như thế nào?

Mảng JSON được chuyển thành các phần tử XML lặp lại được bao bọc trong thẻ <item>. Ví dụ, [1, 2, 3] trở thành ba phần tử <item> bên trong phần tử cha.

Có hoạt động với tệp JSON lớn không?

Có, vì mọi thứ chạy trong trình duyệt, mức trần thực tế là bộ nhớ khả dụng của thiết bị bạn. Hàng chục nghìn dòng JSON chuyển đổi trong dưới một giây trên một laptop hiện đại. Đầu vào rất lớn (vài MB) có thể đứng tab một thoáng khi parser duyệt cây. Cho việc chuyển đổi theo lô các tập dữ liệu lớn, một script dùng bộ chuyển đổi phía server (xml2js trong Node, dicttoxml trong Python) phù hợp hơn.

JSON của tôi có bị tải lên server không?

Không. Việc chuyển đổi chạy hoàn toàn trong trình duyệt, JSON được dán không bao giờ rời khỏi thiết bị của bạn. Hãy kiểm chứng trong tab Network của DevTools khi bấm Convert (không request nào được gửi đi), hoặc đặt trang offline (chế độ máy bay) sau khi đã tải xong. An toàn cho phản hồi API production, cấu hình nội bộ, hoặc bất kỳ dữ liệu nào bạn không muốn chia sẻ ra ngoài.

Tôi có thể bắt một số khóa JSON trở thành thuộc tính XML thay vì phần tử con không?

Bộ chuyển đổi này phát ra mọi khóa JSON dưới dạng phần tử con, không phải thuộc tính. Quy ước mà một số bộ chuyển đổi dùng, khóa có tiền tố @ trở thành thuộc tính ("@id": 5id="5" trên cha), là quy ước BadgerFish. Nếu bên tiêu thụ phía sau yêu cầu một số giá trị làm thuộc tính, bạn sẽ cần một bộ chuyển đổi tùy biến hiểu quy ước, hoặc sửa thủ công XML kết quả.

Điều gì xảy ra với khóa JSON chứa khoảng trắng hoặc ký tự không hợp lệ trong XML?

Tên phần tử XML có quy tắc nghiêm ngặt hơn khóa JSON: phải bắt đầu bằng chữ cái hoặc dấu gạch dưới, không được chứa khoảng trắng và cấm phần lớn dấu câu. Khóa có ký tự không hợp lệ được vệ sinh, khoảng trắng đổi thành dấu gạch dưới, chữ số đầu được thêm tiền tố dấu gạch dưới, ký tự đặc biệt bị bỏ. Điều đó nghĩa là vòng tròn JSON → XML → JSON có thể không tạo ra tên khóa gốc chính xác. Nếu dữ liệu của bạn có khóa khác thường, hãy kiểm tra đầu ra để chắc rằng việc biến dạng không phá hỏng điều quan trọng.

Công cụ liên quan