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

How to Convert XML to JSON in Java

How to Convert XML to JSON in Java

Converting XML to JSON is a common task in many Java applications, especially when working with APIs, data exchange, or legacy system integration. XML (Extensible Markup Language) and JSON (JavaScript Object Notation) are two popular data formats used for exchanging data between systems. While XML is more verbose and uses tags to define data, JSON is more lightweight and uses key-value pairs. In this guide, we will explore how to convert XML to JSON in Java.

Quick Example

Here is a minimal example that demonstrates how to convert XML to JSON using the popular Jackson library:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class XmlToJson {
    public static void main(String[] args) throws Exception {
        String xml = "<person><name>John</name><age>30</age></person>";
        XmlMapper xmlMapper = new XmlMapper();
        JsonNode jsonNode = xmlMapper.readTree(xml);
        ObjectMapper objectMapper = new ObjectMapper();
        String json = objectMapper.writeValueAsString(jsonNode);
        System.out.println(json);
    }
}

This code uses the XmlMapper to parse the XML string into a JsonNode, and then uses the ObjectMapper to convert the JsonNode to a JSON string.

Step-by-Step Breakdown

Let's break down the code line by line:

  1. String xml = "<person><name>John</name><age>30</age></person>";: This line defines the XML string that we want to convert to JSON.
  2. XmlMapper xmlMapper = new XmlMapper();: This line creates an instance of the XmlMapper class, which is used to parse the XML string.
  3. JsonNode jsonNode = xmlMapper.readTree(xml);: This line uses the XmlMapper to parse the XML string into a JsonNode object.
  4. ObjectMapper objectMapper = new ObjectMapper();: This line creates an instance of the ObjectMapper class, which is used to convert the JsonNode to a JSON string.
  5. String json = objectMapper.writeValueAsString(jsonNode);: This line uses the ObjectMapper to convert the JsonNode to a JSON string.
  6. System.out.println(json);: This line prints the resulting JSON string to the console.

Handling Edge Cases

Here are some common edge cases that you may encounter when converting XML to JSON in Java:

Empty/Null Input

If the input XML string is empty or null, the XmlMapper will throw a JsonParseException. To handle this case, you can add a simple null check:

if (xml == null || xml.isEmpty()) {
    System.out.println("{}"); // or throw an exception
}

Invalid Input

If the input XML string is invalid, the XmlMapper will throw a JsonParseException. To handle this case, you can use a try-catch block:

try {
    JsonNode jsonNode = xmlMapper.readTree(xml);
} catch (JsonParseException e) {
    System.out.println("Invalid XML: " + e.getMessage());
}

Large Input

If the input XML string is very large, the XmlMapper may throw an OutOfMemoryError. To handle this case, you can use a streaming approach:

XmlMapper xmlMapper = new XmlMapper();
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(System.out);
xmlMapper.readTree(xml).writeTo(jsonGenerator);

This code uses a JsonGenerator to write the JSON output to the console, rather than loading the entire XML string into memory.

Unicode/Special Characters

If the input XML string contains Unicode or special characters, the XmlMapper may not handle them correctly. To handle this case, you can use a custom CharacterEscapes implementation:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.getFactory().setCharacterEscapes(new CustomCharacterEscapes());

Common Mistakes

Here are three common mistakes that developers make when converting XML to JSON in Java:

Mistake 1: Using the Wrong Parser

Using the wrong parser can lead to incorrect results or exceptions. For example, using the ObjectMapper to parse XML will throw a JsonParseException.

// Wrong code
ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(xml);

// Correct code
XmlMapper xmlMapper = new XmlMapper();
JsonNode jsonNode = xmlMapper.readTree(xml);

Mistake 2: Not Handling Null Values

Not handling null values can lead to NullPointerExceptions or incorrect results. For example, not checking for null values before calling writeValueAsString() will throw a NullPointerException.

// Wrong code
String json = objectMapper.writeValueAsString(jsonNode);

// Correct code
if (jsonNode != null) {
    String json = objectMapper.writeValueAsString(jsonNode);
}

Mistake 3: Not Using the Correct Data Type

Not using the correct data type can lead to incorrect results or exceptions. For example, using a String to store a JSON object will throw a JsonParseException.

// Wrong code
String json = "{\"name\":\"John\",\"age\":30}";

// Correct code
JsonNode jsonNode = new ObjectNode(JsonNodeFactory.instance);
jsonNode.put("name", "John");
jsonNode.put("age", 30);

Performance Tips

Here are three practical performance tips for converting XML to JSON in Java:

Tip 1: Use a Streaming Approach

Using a streaming approach can improve performance by reducing memory usage and avoiding the need to load the entire XML string into memory.

XmlMapper xmlMapper = new XmlMapper();
JsonGenerator jsonGenerator = new JsonFactory().createGenerator(System.out);
xmlMapper.readTree(xml).writeTo(jsonGenerator);

Tip 2: Use a Custom CharacterEscapes Implementation

Using a custom CharacterEscapes implementation can improve performance by reducing the number of escape sequences used in the JSON output.

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.getFactory().setCharacterEscapes(new CustomCharacterEscapes());

Tip 3: Use a Faster XML Parser

Using a faster XML parser can improve performance by reducing the time it takes to parse the XML string. For example, using the XmlMapper with the Woodstox parser can be faster than using the default parser.

XmlMapper xmlMapper = new XmlMapper(new WoodstoxXmlFactory());

FAQ

Q: What is the difference between XmlMapper and ObjectMapper?

A: XmlMapper is used to parse XML, while ObjectMapper is used to convert between JSON and Java objects.

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

A: You can use a null check to handle null values, or use a custom JsonSerializer implementation to handle null values.

Q: How do I improve performance when converting large XML files to JSON?

A: You can use a streaming approach, a custom CharacterEscapes implementation, or a faster XML parser to improve performance.

Q: Can I use XmlMapper to parse JSON?

A: No, XmlMapper is used to parse XML, not JSON. Use ObjectMapper to parse JSON.

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

A: You can use a custom CharacterEscapes implementation to handle Unicode characters.

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