Turn JSON into XML with one root element and repeated tags for lists
Runs in your browser. Nothing you type is sent anywhere. Updated on 24 Oct 2026.XML needs exactly one root element and has no lists, so a JSON array is written as the same tag repeated. Keys that are not valid tag names are renamed and the change is listed. Nothing carries types across: a number in JSON becomes text between tags, because XML has no idea what a number is. Empty values become empty elements, which is the closest XML gets to null.
The page opens with JSON chosen under From and XML under To.
Paste your JSON into the JSON input pane, or press Open file to load a .json file.
Read the XML on the right: each array comes out as the same tag repeated, and renamed keys are listed below it.
Press Copy XML to put it on the clipboard, or Download XML to save the file.
This converter moves structured data between JSON, YAML, XML, CSV, TSV, TOML and INI in every direction that makes sense: forty of the forty-two possible pairs. Paste the data or open the file and it works out which format it is from the content itself, not from the name on the end of it, then offers the conversion people usually want next. If the guess is wrong, one tap fixes it.
The difficult part is not parsing. It is being honest about shape. CSV and TSV are rows of columns; JSON, YAML, TOML and XML are values inside values; INI is one flat level of named sections. Moving between those shapes always decides something on your behalf, so every conversion prints one line saying what it decided: which list became the rows, which nested objects became dotted columns such as address.city, which keys were left out and why. A list inside a cell becomes JSON text rather than disappearing.
Anything a target format cannot hold is named rather than dropped quietly. TOML has no empty value, so each null is listed by the key it came from. XML has no types and no lists, so a repeated tag is the only list it can write, and attributes become keys marked with an at sign. Comments in YAML, TOML and INI go, because nothing else here has a place to keep them.
The rest of the article, and all 8 questions about Data Converter, are on the Data Converter page.
JSON, YAML, XML, CSV, TSV, TOML and INI, in forty of the forty-two possible directions. The two it refuses are CSV to INI and TSV to INI, because INI holds named sections and spreadsheet rows have no names, so every row would need an invented heading such as [row_1].
A spreadsheet needs rows, so the converter looks for the list that is the table. A JSON array of objects becomes one row per object. If the array sits inside an object, that array is used and the other top-level keys are named so you can see exactly what is not in the sheet. Nested objects become dotted columns such as address.city.
An attribute becomes a key with an at sign in front of it, so id="7" becomes "@id": 7. Text sitting beside child elements is kept under a #text key. A tag that appears more than once becomes a list; a tag that appears once stays a single value, because the document never said it was a list of one.
Yes. Choose Excel in the To row and press Download Excel: the table is saved as an .xlsx with a bold header row, real numbers and dates, and codes like 007 kept as text. To go the other way, open an .xlsx of up to 10 MB; one sheet is read in your browser and shown as CSV, ready to become XML or JSON. Formulas come across as their saved results.
Still stuck? Ask about Data Converter and anybody who knows can answer. No account needed.
Same job, other tools: TSV to JSON – Convert tab-separated values, such as a paste from Excel, into JSON · JSON to YAML – Turn JSON into clean, readable YAML for configs.
In the collections JSON Tools · Developer Converters.