XML ↔ JSON / TOML / INI API
Chuyển XML sang JSON và ngược lại, kiểm tra XML hợp lệ kèm dòng và cột lỗi, định dạng đẹp hoặc nén XML, chuyển TOML, INI sang JSON và ngược lại.
Gửi tài liệu trong xml, json, toml hoặc ini (hoặc gửi body thô kèm from) và chọn to: json, xml, toml, ini, validate, pretty hoặc minify. Khi chuyển XML sang JSON, thuộc tính được giữ với tiền tố (mặc định @_, dùng attribute_prefix=none để bỏ), phần chữ lẫn trong thẻ nằm ở #text; có thể ép mảng cho thẻ lặp lại (array_tags=item,line hoặc always_array=true), giữ đúng thứ tự thẻ (preserve_order=true), bỏ tiền tố namespace (remove_ns=true), giữ CDATA hoặc chú thích. Giá trị mặc định giữ nguyên là chuỗi, trừ khi đặt parse_values=true, nên mã số thuế, số hoá đơn như 0101234567 không bị mất số 0 ở đầu.
Khi chuyển JSON sang XML, khoá bắt đầu bằng tiền tố trở thành thuộc tính, mảng thành các thẻ lặp lại, kết quả được bọc trong root khi cần; XML tạo ra được kiểm tra lại và có cảnh báo nếu tên khoá không hợp lệ làm tên thẻ. validate báo lỗi đầu tiên kèm dòng và cột, cùng thẻ gốc, namespace và số phần tử; pretty / minify thụt lề lại hoặc nén XML (hay JSON), vẫn giữ chú thích, CDATA và chỉ thị xử lý.
An toàn: việc mở rộng entity bị giới hạn (chống "billion laughs"), không bao giờ tải entity bên ngoài (SYSTEM / PUBLIC), độ sâu tối đa 256 cấp và tài liệu tối đa 5 MB. TOML hỗ trợ chuẩn 1.0 trừ số nguyên độ chính xác tuỳ ý (ngày giờ trả về dạng chuỗi, inf / nan cũng là chuỗi); INI hỗ trợ section, chú thích ; / #, giá trị trong ngoặc kép, mảng key[] và section phân cấp bằng dấu chấm (tuỳ chọn).
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
xml | body | string | không | Tài liệu XML (hoặc gửi json, toml, ini, input + from, hay body thô). | |
json | body | object | không | Giá trị JSON (object hoặc chuỗi JSON) cần chuyển. | |
toml | body | string | không | Tài liệu TOML. | |
ini | body | string | không | Tài liệu INI. | |
from | body | string | không | xml, json, toml hoặc ini (tự nhận biết nếu bỏ trống). | |
to | body | string | không | json | json, xml, toml, ini, validate, pretty hoặc minify (mặc định json, hoặc xml khi đầu vào là JSON). |
attribute_prefix | body | string | không | @_ | Tiền tố của khoá thuộc tính; none để không dùng. |
attributes | body | boolean | không | true | false để bỏ thuộc tính. |
text_node_name | body | string | không | #text | Khoá chứa phần chữ của thẻ có cả thuộc tính hoặc thẻ con. |
array_tags | body | string | không | Tên các thẻ (cách nhau bằng dấu phẩy) luôn trả về dạng mảng. | |
always_array | body | boolean | không | false | Mọi thẻ dưới thẻ gốc đều thành mảng. |
parse_values | body | boolean | không | false | Chuyển số và boolean (XML, INI). Số có 0 ở đầu vẫn giữ dạng chuỗi. |
preserve_order | body | boolean | không | false | Kết quả dạng mảng có thứ tự (giữ đúng thứ tự thẻ, nội dung hỗn hợp). |
remove_ns | body | boolean | không | false | Bỏ tiền tố namespace (inv:Total → Total). |
keep_cdata | body | boolean | không | false | Giữ phần CDATA trong #cdata. |
keep_comments | body | boolean | không | false | Giữ chú thích trong #comment. |
root | body | string | không | root | JSON sang XML: tên thẻ gốc bao ngoài. |
indent | body | number | không | 2 | Số khoảng trắng thụt lề khi xuất XML / JSON (0 = một dòng). |
declaration | body | boolean | không | true | JSON sang XML: thêm <?xml version="1.0" encoding="UTF-8"?>. |
nested_sections | body | boolean | không | false | INI: [a.b] thành object lồng nhau. |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/xml-convert" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"xml":"<invoice id=\"HD001\"><buyer>Công ty A</buyer><item><name>Pen</name><qty>2</qty></item><item><name>Book</name><qty>1</qty></item></invoice>"}'const res = await fetch('https://apibox.io.vn/v1/xml-convert', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"xml": "<invoice id=\"HD001\"><buyer>Công ty A</buyer><item><name>Pen</name><qty>2</qty></item><item><name>Book</name><qty>1</qty></item></invoice>"
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/xml-convert",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"xml": "<invoice id=\"HD001\"><buyer>Công ty A</buyer><item><name>Pen</name><qty>2</qty></item><item><name>Book</name><qty>1</qty></item></invoice>"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/xml-convert');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"xml":"<invoice id=\\"HD001\\"><buyer>Công ty A</buyer><item><name>Pen</name><qty>2</qty></item><item><name>Book</name><qty>1</qty></item></invoice>"}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"from": "xml",
"to": "json",
"root": "invoice",
"json": {
"invoice": {
"buyer": "Công ty A",
"item": [
{
"name": "Pen",
"qty": "2"
},
{
"name": "Book",
"qty": "1"
}
],
"@_id": "HD001"
}
}
}
Ứng dụng
- Đọc file XML hoá đơn điện tử, tờ khai thuế, BHXH dưới dạng JSON
- Gửi dữ liệu JSON sang hệ thống SOAP / XML cũ
- Kiểm tra file XML người dùng tải lên và chỉ đúng dòng bị lỗi
- Chuyển file cấu hình giữa TOML, INI và JSON
Hỏi đáp
Vì sao số được trả về dạng chuỗi?
XML không có kiểu dữ liệu, và các mã như 0101234567 phải giữ số 0 ở đầu. Thêm parse_values=true để nhận số và boolean.
Làm sao để thẻ lặp lại luôn là mảng?
Liệt kê tên thẻ trong array_tags (ví dụ array_tags=HHDVu), hoặc dùng always_array=true cho mọi thẻ dưới thẻ gốc.
Xử lý DOCTYPE / entity có an toàn không?
Có: entity nội bộ chỉ được mở rộng trong giới hạn nhỏ, phần lồng nhau vượt giới hạn giữ nguyên dạng chữ, entity bên ngoài bị từ chối.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.