Chuyển XML sang JSON có kiểm soát: thuộc tính, mảng, CDATA, namespace
Công cụ chuyển XML sang JSON này dùng bộ phân tích XML có sẵn trong trình duyệt, nên XML sai cú pháp được báo lỗi rõ ràng thay vì cho ra kết quả nửa vời. Bạn tự quyết định cách ghi thuộc tính, khi nào một thẻ thành mảng, CDATA và namespace xử lý ra sao, có đổi chuỗi số sang kiểu số hay không. Chiều ngược lại tạo XML hợp lệ từ JSON, tự escape ký tự đặc biệt và sửa tên thẻ không hợp lệ.
Tính năng nổi bật
- Phân tích XML bằng DOMParser của trình duyệt, báo lỗi cú pháp kèm dòng và cột khi trình duyệt cung cấp
- Thuộc tính ghi với tiền tố tùy chọn (@id, _id...) hoặc gom chung vào một object như _attr
- Mảng tự động khi thẻ lặp lại, chế độ mọi phần tử con đều là mảng, hoặc chỉ định danh sách thẻ luôn là mảng
- CDATA gộp vào nội dung chữ hoặc tách riêng khóa #cdata; tùy chọn giữ chú thích và khai báo xmlns
- Namespace: giữ tiền tố (soap:Body) hoặc chỉ lấy tên cục bộ (Body)
- Đổi số và true/false sang kiểu JSON chỉ khi không mất thông tin: 007, 1.50, mã số thuế giữ nguyên dạng chuỗi
- Chiều JSON sang XML: chọn tên thẻ gốc, tên thẻ phần tử mảng, thụt lề, dòng khai báo; escape & < > " và ký tự xuống dòng trong thuộc tính
- Tự sửa tên thẻ không hợp lệ (bắt đầu bằng số, có dấu cách), bỏ ký tự điều khiển cấm trong XML 1.0 và báo lại từng thay đổi
Vì sao cần chọn cách chuyển thay vì bấm một nút là xong
XML và JSON không tương ứng một đối một. XML có thuộc tính, có chữ xen giữa thẻ con, có thứ tự thẻ, có CDATA và namespace; JSON chỉ có object, mảng và giá trị. Mỗi thư viện chọn một quy ước riêng để ghép hai thế giới, và kết quả của thư viện này thường không khớp đoạn code viết cho thư viện kia. Lỗi phổ biến nhất: danh sách sản phẩm có hai phần tử thì ra mảng, có một phần tử thì ra object, code duyệt mảng bị hỏng khi đơn hàng chỉ có một món. Lỗi thứ hai: mã số thuế 0312345678 bị đổi thành số 312345678, mất số 0 đầu. Công cụ này để bạn chọn quy ước phù hợp với phía nhận dữ liệu, xem ngay kết quả, và cảnh báo khi dữ liệu có cấu trúc không chuyển trọn vẹn được.
Lợi ích khi sử dụng
- Tích hợp API, dịch vụ cũ trả XML (SOAP, RSS, hóa đơn điện tử, sitemap) vào ứng dụng xử lý JSON
- Có JSON ổn định cho code: thẻ lặp luôn là mảng, mã có số 0 đầu không bị mất
- Biết trước dữ liệu nào không chuyển trọn vẹn nhờ cảnh báo nội dung hỗn hợp và trùng tên
- Tạo XML hợp lệ từ JSON để gửi cho hệ thống chỉ nhận XML
- Dữ liệu nhạy cảm như hóa đơn, thông tin khách hàng không rời khỏi máy
- Không cần cài thư viện hay viết script chỉ để xem nhanh một file XML dưới dạng JSON
Cách chuyển XML sang JSON
- 1Dán XML vào ô bên trái hoặc bấm Mở file để chọn file .xml (tối đa 20 MB).
- 2Chọn cách ghi thuộc tính, khóa cho nội dung chữ, cách xử lý CDATA và namespace.
- 3Chọn chế độ mảng; nếu có thẻ có thể lặp như sanPham, item, ghi tên vào ô Luôn là mảng với thẻ.
- 4Bật Đổi số và true/false nếu phía nhận cần kiểu số, sau đó đọc kết quả JSON và các cảnh báo bên dưới.
- 5Bấm Sao chép hoặc Tải file .json. Muốn chuyển ngược, chọn JSON sang XML hoặc bấm Đổi chiều.
Quy ước chuyển mặc định và ví dụ
Mặc định, thuộc tính có tiền tố @, nội dung chữ nằm ở khóa #text khi phần tử có cả thuộc tính hoặc thẻ con, phần tử chỉ có chữ thành giá trị chuỗi trực tiếp, thẻ lặp lại thành mảng. Ví dụ phần tử sanPham có thuộc tính sku="A01", các thẻ con ten là Áo sơ mi, soLuong là 2, donGia là 350000 sẽ thành {"sanPham":{"@sku":"A01","ten":"Áo sơ mi","soLuong":"2","donGia":"350000"}}. Khi bật Đổi số và true/false, soLuong thành 2 và donGia thành 350000 dạng số. Thẻ gốc luôn được giữ làm khóa ngoài cùng để không mất tên phần tử gốc.
Vì sao chuyển đổi XML và JSON không phải lúc nào cũng khứ hồi được
Một số thông tin của XML không có chỗ trong JSON. Nội dung hỗn hợp như phần tử p gồm Xin, thẻ b chứa chào, rồi bạn: JSON gom chữ vào #text và thẻ con vào khóa b, thành {"p":{"b":"chào","#text":"Xin bạn"}}, vị trí của chữ so với thẻ con bị mất, chuyển ngược lại sẽ ra Xin bạn đứng trước thẻ b. Thứ tự giữa các thẻ khác tên (a, b, a) cũng không giữ được vì các thẻ cùng tên bị gom thành một mảng. Chú thích, khai báo DOCTYPE và processing instruction bị bỏ. CDATA gộp vào chữ thường sẽ quay lại XML dưới dạng chữ đã escape, nội dung như nhau nhưng khác hình thức. Thẻ xuất hiện một lần ở chế độ tự động là object chứ không phải mảng. Công cụ báo số phần tử có nội dung hỗn hợp để bạn biết khi nào cần cẩn thận.
Đổi chuỗi sang số mà không làm hỏng dữ liệu
Trong XML mọi giá trị đều là chữ, nên có đổi sang số hay không là quyết định của người dùng. Công cụ chỉ đổi khi giá trị viết lại từ số đúng bằng chuỗi gốc: 12 thành 12, -3.25 thành -3.25, nhưng 007, 1.50, 1e3, 0312345678 và 12345678901234567890 vẫn giữ là chuỗi, vì đổi sẽ mất số 0 đầu, mất số 0 cuối hoặc vượt độ chính xác của JavaScript. Chỉ true và false viết thường mới thành kiểu boolean; TRUE, Yes, 1 vẫn là chuỗi. Quy tắc bảo thủ này tránh lỗi âm thầm với mã số thuế, số điện thoại, mã bưu chính, mã sản phẩm.
Namespace, xmlns và CDATA
Tài liệu SOAP, hóa đơn điện tử hay RSS mở rộng thường có namespace như soap:Envelope, inv:vat. Giữ tiền tố cho JSON sát với tài liệu gốc; bỏ tiền tố cho khóa ngắn gọn hơn nhưng có thể trùng tên nếu hai namespace dùng cùng tên cục bộ. Các thuộc tính khai báo xmlns có thể giữ hoặc bỏ. CDATA dùng để chứa văn bản có ký tự < và & mà không phải escape; mặc định công cụ gộp nội dung CDATA vào chữ thường, bạn có thể tách riêng vào khóa #cdata để khi chuyển ngược công cụ ghi lại đúng khối CDATA, kể cả khi nội dung chứa chuỗi ]]> (được tách thành hai khối liền nhau).
Chuyển JSON sang XML: tên thẻ và escape
Khóa JSON có thể là bất cứ chuỗi nào, còn tên thẻ XML thì không được bắt đầu bằng số, không có dấu cách hay phần lớn ký hiệu. Công cụ thay ký tự không hợp lệ bằng dấu gạch dưới và thêm gạch dưới trước tên bắt đầu bằng số, ví dụ họ tên thành họ_tên, 1abc thành _1abc, rồi liệt kê mọi tên đã đổi. Chữ tiếng Việt có dấu được phép trong tên thẻ. Giá trị chữ được escape & < >, giá trị thuộc tính escape thêm dấu ngoặc kép, tab và xuống dòng thành 	 để không bị chuẩn hóa mất. Ký tự điều khiển mà XML 1.0 cấm bị bỏ kèm cảnh báo. Khóa có tiền tố thuộc tính (mặc định @) thành thuộc tính, khóa #text thành nội dung chữ, mảng thành các thẻ lặp cùng tên. Nếu JSON có nhiều khóa ở ngoài cùng, công cụ bọc trong thẻ gốc do bạn đặt tên.
Giới hạn của công cụ
Công cụ đọc XML bằng bộ phân tích của trình duyệt nên nội dung thông báo lỗi phụ thuộc trình duyệt (thường bằng tiếng Anh). Thực thể khai báo trong DOCTYPE được trình duyệt xử lý theo chính sách riêng, thực thể bên ngoài không được tải. File tối đa 20 MB. Công cụ không kiểm tra XML theo XSD hay DTD, không hỗ trợ XPath. Nội dung hỗn hợp, thứ tự thẻ khác tên, chú thích, processing instruction không chuyển khứ hồi được như đã giải thích ở trên. Muốn định dạng hoặc làm gọn XML trước khi chuyển, hãy dùng XML Formatter.
Câu hỏi thường gặp (FAQ)
Chuyển XML sang JSON có mất dữ liệu không?
Với XML dạng dữ liệu (thẻ lồng nhau, thuộc tính, giá trị chữ) thì không. Với nội dung hỗn hợp, thứ tự giữa các thẻ khác tên, chú thích và processing instruction thì có mất thông tin, công cụ sẽ cảnh báo khi gặp nội dung hỗn hợp.
Vì sao danh sách có một phần tử lại ra object chứ không phải mảng?
Ở chế độ mảng tự động, chỉ thẻ lặp lại mới thành mảng. Hãy ghi tên thẻ vào ô Luôn là mảng với thẻ, hoặc chọn chế độ mọi phần tử con đều là mảng, để cấu trúc JSON ổn định.
Thuộc tính XML được ghi thế nào trong JSON?
Mặc định là khóa có tiền tố @, ví dụ sku="A01" thành "@sku": "A01". Bạn có thể đổi tiền tố (như _ hay -) hoặc gom mọi thuộc tính vào một object con tên _attr.
Có nên để tiền tố thuộc tính rỗng không?
Được, nhưng nếu một phần tử có thuộc tính và thẻ con cùng tên, hai giá trị sẽ bị gộp thành mảng. Công cụ cảnh báo khi điều đó xảy ra; dùng tiền tố khác rỗng là an toàn hơn.
Vì sao mã số thuế không bị đổi thành số khi bật đổi kiểu?
Vì 0312345678 viết lại từ số sẽ thành 312345678, mất số 0 đầu. Công cụ chỉ đổi khi không mất thông tin, nên mã có số 0 đầu, số có số 0 cuối sau dấu thập phân và số quá lớn đều giữ dạng chuỗi.
Công cụ xử lý CDATA ra sao?
Mặc định nội dung CDATA được gộp vào chữ thường như trình duyệt đọc được. Chọn tách riêng khóa #cdata nếu muốn khi chuyển ngược sang XML vẫn có khối CDATA.
Namespace như soap: có được giữ lại không?
Có, mặc định giữ nguyên tiền tố trong tên khóa, ví dụ soap:Body. Chọn bỏ tiền tố nếu muốn khóa ngắn gọn; thuộc tính khai báo xmlns có thể giữ hoặc bỏ.
XML của tôi bị báo lỗi nhưng mở bằng trình duyệt vẫn thấy?
Trình duyệt hiển thị cả phần XML trước chỗ lỗi. Công cụ yêu cầu toàn bộ tài liệu hợp lệ: đúng một phần tử gốc, thẻ đóng mở khớp nhau, giá trị thuộc tính trong dấu nháy, ký tự & được viết &. Đọc dòng và cột trong thông báo để sửa.
HTML có chuyển sang JSON bằng công cụ này được không?
Chỉ khi HTML đó là XHTML hợp lệ. HTML thông thường có thẻ không đóng như <br> hay thuộc tính không có giá trị nên bộ phân tích XML sẽ báo lỗi.
Chuyển JSON sang XML thì thẻ gốc lấy từ đâu?
Nếu JSON chỉ có một khóa ngoài cùng chứa object, khóa đó làm thẻ gốc. Nếu có nhiều khóa hoặc là mảng, công cụ bọc trong thẻ gốc bạn đặt tên (mặc định root), phần tử mảng dùng tên thẻ item hoặc tên bạn chọn.
Khóa JSON có dấu cách thì thành thẻ XML thế nào?
Ký tự không hợp lệ trong tên thẻ được thay bằng dấu gạch dưới, ví dụ "họ tên" thành họ_tên. Tên bắt đầu bằng số được thêm dấu gạch dưới ở đầu. Công cụ liệt kê mọi tên đã đổi.
File XML của tôi có bị tải lên máy chủ không?
Không. Việc đọc file và chuyển đổi dùng DOMParser và JavaScript ngay trong trình duyệt của bạn.
Công cụ có kiểm tra XML theo XSD không?
Không, công cụ chỉ kiểm tra XML có đúng cú pháp (well-formed). Kiểm tra theo lược đồ XSD hay DTD cần công cụ chuyên dụng.
Từ khóa liên quan
- chuyển xml sang json
- xml to json online
- convert xml to json
- đổi xml sang json
- json to xml online
- chuyển json sang xml
- xml json converter
- xml attributes to json
- xml array json
- cdata to json
- soap xml to json
- đọc file xml
- xml sang json giữ thuộc tính
- xml namespace json
- parse xml javascript
- domparser xml
- xml hóa đơn điện tử sang json
- rss xml to json
- chuyển đổi xml online