Chuyển đổi XML ↔ JSON là gì?
XML (Extensible Markup Language) là định dạng văn bản dựa trên thẻ cho dữ liệu phân cấp. Bạn sẽ thấy nó trong dịch vụ web SOAP, nguồn cấp RSS và Atom, hồ sơ sức khỏe HL7 FHIR, file sitemap.xml và các file cấu hình đi kèm với Maven, Spring và Android Gradle. JSON (JavaScript Object Notation, được định nghĩa bởi RFC 8259) mô tả cùng loại dữ liệu lồng nhau nhưng với dấu ngoặc và mảng thay vì thẻ mở và đóng. JSON là thứ gần như mọi REST API nói ngày nay và là hình dạng giá trị gốc của mọi runtime trình duyệt. Chuyển đổi giữa hai định dạng là một trong những công việc nghe có vẻ đơn giản cho đến khi bạn gặp thuộc tính, nội dung hỗn hợp, con lặp lại và CDATA. Regex tùy chỉnh là câu trả lời sai; bộ phân tích thực là câu trả lời đúng. Công cụ này gửi kèm bộ phân tích thực (fast-xml-parser) và chạy nó trong trình duyệt, vì vậy bạn có thể dán phong bì XML được trả về bởi dịch vụ SOAP cũ và xem nó trở thành đối tượng JSON bạn có thể thả thẳng vào Redux store, hoặc lấy payload JSON bạn đã lắp ráp trong REST client và biến nó trở lại thành hình dạng XML mà endpoint doanh nghiệp vẫn mong đợi.
Ánh xạ XML ↔ JSON hoạt động như thế nào?
Mọi chuyển đổi đều chạy cục bộ trong trình duyệt của bạn bằng thư viện fast-xml-parser đi kèm (MIT, phiên bản 4.x). Các quy tắc ánh xạ cấp cao là:
- Phần tử sang khóa: mỗi tên phần tử XML trở thành khóa đối tượng JSON.
<user><name>Alice</name></user>ánh xạ thành{"user":{"name":"Alice"}}. - Thuộc tính sang khóa có tiền tố: thuộc tính được lưu dưới khóa được tạo bằng cách thêm tiền tố đã chọn. Với tiền tố
@,<user id="1">tạo ra{"user":{"@id":"1"}}. - Nội dung văn bản sang khóa text-node: khi phần tử có cả thuộc tính và văn bản, văn bản nằm dưới khóa text-node đã chọn.
<price currency="USD">9.99</price>với khóa#texttạo ra{"price":{"@currency":"USD","#text":"9.99"}}. - Con lặp lại sang mảng: khi Buộc mảng cho thẻ con lặp lại được bật, nhiều phần tử anh em cùng tên thu gọn thành mảng JSON.
<items><item>A</item><item>B</item></items>trở thành{"items":{"item":["A","B"]}}. - Phần CDATA: văn bản thô bên trong
<![CDATA[…]]>được giữ dưới khóa#cdatađể dấu ngoặc nhọn và dấu và (&) không bị re-escape trong round-trip. - JSON sang XML đảo ngược ánh xạ: khóa đối tượng trở thành phần tử, khóa có tiền tố trở thành thuộc tính và mảng mở rộng thành các phần tử anh em lặp lại.
Tại sao chuyển đổi XML và JSON với công cụ này?
- Dữ liệu của bạn ở lại trên máy của bạn. Mọi phân tích và mọi build đều chạy trong bối cảnh JavaScript của trang này. Gói FHIR bệnh nhân, phong bì xác thực SOAP, file cấu hình độc quyền, xuất hóa đơn — không gì trong số đó chạm vào máy chủ của chúng tôi vì không có bước tải lên trong code path. Mở bảng network và xem.
- SOAP cũ vào front-end ưu tiên REST là yêu cầu phổ biến nhất chúng tôi nghe. Ngân hàng hay công ty bảo hiểm expose endpoint SOAP sẽ không được ngừng dùng trong nhiều năm; ứng dụng React hay Vue gọi nó không muốn học XML. Dán phong bì, nhận JSON trở lại với thuộc tính có tiền tố và namespace được giữ nguyên, thả nội dung
Bodyvào state store của bạn. - Consumer RSS, Atom và sitemap cũng được hưởng lợi. Directory podcast, aggregator tin tức hay dashboard nội bộ nhập
sitemap.xmlcó thể bỏ qua việc viết bộ phân tích XML hoàn toàn. Chuyển đổi nguồn cấp một lần, làm việc với mảng JSON và code client của bạn ở lại trong ngôn ngữ nó đã nói. - Export cấu hình hoàn thiện danh sách. Maven, Spring, Android Gradle và build Ant cũ đều phát ra XML; công cụ cloud-native ở đầu kia (Terraform, Ansible, GitHub Actions, cloud-init) đọc JSON hay YAML. Chuyển đổi trong trình duyệt thay vì chạy script Python với dependency bên thứ ba, đặc biệt hữu ích trong môi trường air-gapped nơi dán vào dịch vụ web không rõ danh tính là không thể chấp nhận.
Các ứng dụng phổ biến của chuyển đổi XML ↔ JSON là gì?
Bridging XML và JSON xuất hiện trong kỹ thuật tích hợp, công cụ API và kỹ thuật dữ liệu. Một vài mẫu chiếm ưu thế trong khối lượng công việc:
- Bridging SOAP sang REST: kéo payload
Bodyra khỏi phong bì SOAP được trả về bởi API ngân hàng hay bảo hiểm cũ và chuyển đổi sang JSON để front-end React hay Vue có thể dùng mà không cần lớp proxy phía máy chủ. - Hồ sơ sức khỏe FHIR: chuyển đổi gói XML FHIR HL7 (định dạng HHS/ONC và NHS Digital yêu cầu cho trao đổi dữ liệu lâm sàng) sang JSON để tải vào collection MongoDB Atlas hay cột PostgreSQL JSONB nơi các nhà phân tích có thể truy vấn chúng.
- Xử lý sitemap và nguồn cấp: biến
sitemap.xmlhay nguồn cấp RSS/Atom thành mảng JSON để indexer tùy chỉnh, bot Slack hay widget dashboard có thể lặp qua các mục mà không cần thêm bộ phân tích XML làm dependency.
Round-trip XML ↔ JSON trông như thế nào?
Lấy ví dụ nhỏ. Dán <user id="1"><name>Alice</name></user> vào đầu vào, đặt tiền tố thuộc tính là @, để chế độ XML sang JSON và nhấn Chuyển đổi. Đầu ra là {"user":{"@id":"1","name":"Alice"}}. Lật chế độ sang JSON sang XML, dán JSON đó trở lại, đặt thụt lề là 2 dấu cách và nhấn Chuyển đổi lại. Bạn sẽ nhận được <user id="1">\n <name>Alice</name>\n</user>, về cấu trúc giống hệt bản gốc. Điều duy nhất không được đảm bảo qua round-trip là thứ tự thuộc tính, vì các khóa đối tượng JSON không có thứ tự theo đặc tả.
Bộ chuyển đổi XML ↔ JSON này gửi kèm fast-xml-parser@4 đóng gói tại cùng origin, xử lý thuộc tính, CDATA, thẻ con lặp lại và tiền tố namespace, và tiếp tục hoạt động ngoại tuyến sau khi trang đã tải. Không có bước tải lên, không proxy CDN, không beacon analytics, không telemetry nào. Mọi byte đầu vào và đầu ra đều ở lại trong trình duyệt của bạn, đó chính xác là điều bạn muốn khi payload tình cờ là gói FHIR bệnh nhân, phong bì xác thực SOAP hay bất kỳ hình dạng dữ liệu nào khác mà không ai ngoài nhóm của bạn được thấy.