XML to JSON

Convert XML to clean JSON in your browser.

Free, no limit Nothing uploaded Works offline No sign-up

The two decisions every XML to JSON converter has to make

XML carries information JSON has no place for, so any conversion has to choose a convention. Two choices matter and this page states both rather than leaving you to work them out from the output.

Attributes become keys prefixed with an at sign. An element written as <item id="7"> produces a key of @id, which keeps attributes distinct from child elements while remaining valid JSON. If the element also has text, that goes into a key called #text.

Repeated elements become an array. The first time a tag name appears it becomes a plain value; the second time it is promoted to an array containing both. That matches how the document reads, and it is why a list of one item looks different from a list of two, which is the known wrinkle in every converter that works this way.

An XML document being parsed into readable JSON

How to use it

Paste into the left box and the result appears in the right one as you type. Change any option and it recalculates immediately.

Copy puts the result on your clipboard and confirms it did. Download saves it as a file, which is the easier route when the output is long enough that selecting it by hand is a nuisance. Clear empties the boxes and puts the cursor back where you need it.

Where a sample button appears, it loads a small realistic example. It is there so you can see what the tool expects before pasting your own material, which is quicker than reading a description of the input format.

Keyboard and mobile

The text areas are ordinary form fields, so every shortcut your system already has works: select all, undo, redo, and paste without formatting. Tab moves between the panes and the controls in the order you would expect, and every control is reachable without a mouse.

On a phone the panes stack rather than sitting side by side, and the text areas grow to a comfortable height. Spellcheck and autocorrect are switched off in them, because a tool that silently capitalises your xml to json input is worse than useless.

If something looks wrong

When the result is not what you expected, the message under the boxes is the first thing to read. It reports what happened rather than a generic failure, so a malformed input names the line to look at and a successful run reports what it did, such as how many lines it kept or how many replacements it made.

A count of zero is informative in itself. It usually means the input did not contain what you thought it did, most often because of capitalisation or an invisible trailing space, both of which are far more common in pasted data than people expect.

Nothing is corrected silently. If the input cannot be handled, the output is left empty and the reason is stated, rather than a partial result being returned that looks plausible and is wrong. A tool that guesses is worse than one that says it could not.

Reading the errors

Invalid XML fails loudly here rather than producing partial output, which is the more useful behaviour when you are debugging a feed.

  • Unclosed tags are the most common failure, and the parser names the element it was expecting to close.
  • Unescaped ampersands are the second most common. A bare ampersand in text content is not valid XML, even though every browser will happily render it in HTML.
  • Multiple root elements fail immediately. XML permits exactly one.
  • A declaration in the wrong place, such as a byte order mark or a blank line before the XML declaration, will also stop the parse.

Values are typed where they are unambiguous, so a numeric element becomes a number and true or false becomes a boolean.

How the four data formats compare

JSON, XML, YAML and CSV describe the same kinds of information and disagree about almost everything else. Which one a system wants is usually a decision somebody made a decade ago, which is why converting between them is such a common job.

FormatBest atCommentsTypesHuman editing
JSONAPIs and interchangeNoYesFair
XMLDocuments and enterprise systemsYesNoPoor
YAMLConfiguration filesYesYesGood
CSVTabular data and spreadsheetsNoNoGood

JSON won interchange because it maps directly onto the data structures every language already has, and because it is unambiguous. Its weakness is that it has no comments, which makes it a poor choice for anything a person maintains by hand.

XML is more capable than any of them, with attributes, namespaces and schema validation, and pays for that in verbosity. It survives wherever a system was built before JSON existed and in industries where schema validation is a requirement rather than a preference.

YAML exists because configuration files are read and edited by people. It has comments, less punctuation and readable nesting, at the cost of significant whitespace and some genuinely surprising type coercion.

CSV is not really a format at all, more a family of conventions, but every spreadsheet on Earth opens it. It holds a flat table and nothing else, which is why converting nested data into it always involves a decision about what to do with the nesting.

Safe to use with real data

Most online developer tools post whatever you paste to a server. For a toy example that is fine. For the payload you are actually debugging, which is a production API response with customer records in it, an internal configuration file or a token, it is a data disclosure that nobody signed off.

Everything on this page runs in your browser. The parsing, the conversion and the formatting all happen in memory on your own machine. Nothing is transmitted, nothing is logged, and there is no server that could keep a copy even if someone asked it to.

You can check that yourself: open your browser's network panel, paste something in and watch nothing happen. Then disconnect from the internet and use the xml to json tool anyway, because once the page has loaded it does not need the network again.

That constraint also shapes what we will build. Anything that genuinely requires a server, such as looking up a value in a database, is not something we can offer honestly under these terms, so we do not offer it at all.

No limits, and no account

There is no cap on how much text you can run through this, no daily quota and no sign up wall at the point where it becomes useful. The XML to JSON tool costs us nothing to provide because it runs on your device rather than ours, so there is nothing to meter.

There is also nothing to install. It is one page of HTML, one stylesheet and one script, which together come to a fraction of the weight of a single photograph. It loads in well under a second on a phone connection and works immediately.

Why we built it this way

Developer tools that upload your input are a poor bargain. You get a conversion and they get your data, and the thing you pasted was usually the one piece of text you should have been most careful with. Running it locally removes the trade entirely.

The whole site is built on the same rule: if the work can be done in the browser, it is done in the browser. Over a hundred tools work that way, and the handful that genuinely cannot are the ones we have not built.

It also means the tool keeps working when we are not paying attention to it. There is no service to go down, no API key to expire and no rate limit to hit at the moment you need it most. The page you loaded is the whole program, and it will behave the same way in five years as it does today.

FAQ

XML to JSON

The questions people ask most about this tool.

As keys prefixed with an at sign, so id="7" becomes "@id": 7. If the element has text as well, that goes into a "#text" key alongside.

Because XML gives no way to tell a one item list from a single value. A tag appearing once becomes a value and appearing twice becomes an array. If your consumer needs consistency, normalise it after conversion.

The conversion stops and the message says what the parser objected to. Unclosed tags and unescaped ampersands are the two most common causes.

Yes, where the text is unambiguously a number or a boolean. Everything else stays a string.

Completely, with no account, no quota and no paid tier. It runs on your own device, so there is nothing for us to meter and nothing to charge for.

No. Everything happens inside this page, in memory on your machine. Nothing is transmitted, stored or logged, and you can confirm it by watching your browser's network panel while you type.

Yes. Once the page has loaded it never needs the network again, so you can disconnect and carry on working.

None that we impose. The practical limit is your device's memory, which on a modern machine is a very large amount of text.

Yes. The panes stack on a narrow screen and the controls stay reachable. Autocorrect is switched off in the input, so nothing is silently changed as you type.

Yes, freely and with no attribution required. What you paste is yours and so is what comes out.

Need a different conversion?

Over a hundred free tools, all running in your browser. Nothing is uploaded and nothing is capped.