Try it yourself with our free Xml Formatter tool — runs entirely in your browser, no signup needed.

How to Convert XML to JSON in TypeScript

How to convert XML to JSON in TypeScript

Converting XML to JSON is a common task in software development, especially when working with APIs or data exchange formats. XML (Extensible Markup Language) is a markup language used for storing and transporting data, while JSON (JavaScript Object Notation) is a lightweight data interchange format. In this article, we will explore how to convert XML to JSON in TypeScript, a superset of JavaScript that adds optional static typing and other features.

Quick Example

import * as xml2js from 'xml2js';

const xml = `
  <root>
    <person>
      <name>John Doe</name>
      <age>30</age>
    </person>
  </root>
`;

const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
  if (err) {
    console.error(err);
  } else {
    const json = JSON.stringify(result, null, 2);
    console.log(json);
  }
});

This code uses the xml2js library to parse the XML string and convert it to a JavaScript object, which is then stringified to JSON.

Step-by-Step Breakdown

Let's walk through the code line by line:

  • import * as xml2js from 'xml2js';: We import the xml2js library, which is a popular library for parsing XML in JavaScript.
  • const xml = '...': We define the XML string that we want to convert to JSON.
  • const parser = new xml2js.Parser();: We create a new instance of the xml2js.Parser class, which will be used to parse the XML string.
  • parser.parseString(xml, (err, result) => { ... });: We call the parseString method on the parser instance, passing in the XML string and a callback function. The callback function will be called when the parsing is complete, and will receive an error object and a result object as arguments.
  • if (err) { console.error(err); }: If an error occurs during parsing, we log the error to the console.
  • const json = JSON.stringify(result, null, 2);: If no error occurs, we stringify the result object to JSON using the JSON.stringify method. We pass in the result object, null as the replacer function, and 2 as the space parameter to pretty-print the JSON.
  • console.log(json);: Finally, we log the resulting JSON string to the console.

Handling Edge Cases

Here are some common edge cases to consider:

Empty/null input

const xml = '';
const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
  if (err) {
    console.error(err);
  } else {
    console.log(result); // {}
  }
});

In this case, the xml2js library will return an empty object {}.

Invalid input

const xml = '< invalid xml >';
const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
  if (err) {
    console.error(err); // Error: Invalid XML
  }
});

In this case, the xml2js library will throw an error.

Large input

const xml = '...large xml string...';
const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
  if (err) {
    console.error(err);
  } else {
    console.log(result); // may take a long time to parse
  }
});

In this case, the xml2js library may take a long time to parse the large XML string. You may want to consider using a streaming parser or a more efficient parsing library.

Unicode/special characters

const xml = `
  <root>
    <person>
      <name>John Doe</name>
      <age>30</age>
      <bio>Hello, world! </bio>
    </person>
  </root>
`;
const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
  if (err) {
    console.error(err);
  } else {
    console.log(result); // Unicode characters are preserved
  }
});

In this case, the xml2js library will preserve Unicode characters in the XML string.

Common Mistakes

Here are some common mistakes developers make when converting XML to JSON in TypeScript:

Mistake 1: Not handling errors

const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
  console.log(result); // may throw an error
});

Corrected code:

const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
  if (err) {
    console.error(err);
  } else {
    console.log(result);
  }
});

Mistake 2: Not checking for null/undefined values

const json = JSON.stringify(result);
console.log(json); // may throw an error

Corrected code:

if (result !== null && result !== undefined) {
  const json = JSON.stringify(result);
  console.log(json);
}

Mistake 3: Not handling large input

const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
  console.log(result); // may take a long time to parse
});

Corrected code:

const parser = new xml2js.Parser();
parser.parseString(xml, (err, result) => {
  if (err) {
    console.error(err);
  } else {
    console.log(result); // consider using a streaming parser or a more efficient parsing library
  }
});

Performance Tips

Here are some practical performance tips for converting XML to JSON in TypeScript:

  • Use a streaming parser or a more efficient parsing library to handle large input.
  • Use JSON.stringify with the replacer function to exclude unnecessary properties.
  • Use JSON.stringify with the space parameter to minimize the output JSON string.

FAQ

Q: What is the best library for converting XML to JSON in TypeScript?

A: The xml2js library is a popular and widely-used library for parsing XML in JavaScript.

Q: How do I handle errors when converting XML to JSON?

A: You should always check for errors when parsing XML and handle them accordingly.

Q: Can I use JSON.parse to convert XML to JSON?

A: No, JSON.parse is used to parse JSON strings, not XML strings.

Q: How do I preserve Unicode characters when converting XML to JSON?

A: The xml2js library will preserve Unicode characters in the XML string.

Q: What is the difference between xml2js and fast-xml-parser?

A: xml2js is a more popular and widely-used library, while fast-xml-parser is a faster and more lightweight library.

AI agent tools available. The CodeTidy MCP Server gives Claude, Cursor, and other AI agents access to 60+ developer tools. One command: npx @codetidy/mcp