Introduction

In modern Java applications, dealing with both XML and JSON formats is a common requirement. While XML is widely used in enterprise systems, JSON has become the preferred format for web APIs and lightweight data exchange. Converting between XML and JSON in Java is essential when integrating different systems and APIs.

This article explores various techniques and libraries for converting XML data to JSON format and vice versa in Java.

Why Convert Between XML and JSON?

  • Interoperability: Ensures seamless communication between services using different formats.
  • API Compatibility: RESTful APIs often use JSON, while legacy systems may still use XML.
  • Data Transformation: Allows efficient data migration and integration between platforms.
  • Storage Flexibility: Some databases and file formats support only one of these formats.

Key Libraries for XML-JSON Conversion in Java

Several Java libraries support XML and JSON conversion, including:

  1. Jackson – Provides jackson-dataformat-xml for handling XML.
  2. org.json (JSON-Java) – A lightweight JSON processing library.
  3. Gson – Google’s JSON parser with support for Java objects.
  4. JAXB (Java Architecture for XML Binding) – Converts XML to Java objects and vice versa.
  5. XStream – A powerful library for converting Java objects to XML and JSON.

Adding Dependencies

To use these libraries, add the required dependencies in your project.

Maven Dependencies

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
    <version>2.14.0</version>
</dependency>

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
</dependency>

Converting XML to JSON with Jackson

Jackson’s XmlMapper allows seamless XML-to-JSON conversion.

Example XML

<user>
    <id>101</id>
    <name>John Doe</name>
    <email>john.doe@example.com</email>
</user>

Java Code for XML to JSON Conversion

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

public class XMLToJsonConverter {
    public static void main(String[] args) throws Exception {
        String xml = "<user><id>101</id><name>John Doe</name><email>john.doe@example.com</email></user>";
        
        XmlMapper xmlMapper = new XmlMapper();
        JsonNode node = xmlMapper.readTree(xml.getBytes());
        
        ObjectMapper jsonMapper = new ObjectMapper();
        String json = jsonMapper.writeValueAsString(node);
        
        System.out.println(json);
    }
}

Output JSON

{
    "id": 101,
    "name": "John Doe",
    "email": "john.doe@example.com"
}

Converting JSON to XML with Jackson

Jackson also supports JSON-to-XML conversion using XmlMapper.

Java Code for JSON to XML Conversion

public class JSONToXMLConverter {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":101,\"name\":\"John Doe\",\"email\":\"john.doe@example.com\"}";

        ObjectMapper jsonMapper = new ObjectMapper();
        JsonNode node = jsonMapper.readTree(json);
        
        XmlMapper xmlMapper = new XmlMapper();
        String xml = xmlMapper.writeValueAsString(node);
        
        System.out.println(xml);
    }
}

Output XML

<id>101</id>
<name>John Doe</name>
<email>john.doe@example.com</email>

Converting XML to JSON with org.json Library

The org.json.XML class provides simple methods for converting XML to JSON.

import org.json.JSONObject;
import org.json.XML;

public class XMLToJSONExample {
    public static void main(String[] args) {
        String xml = "<user><id>101</id><name>John Doe</name><email>john.doe@example.com</email></user>";
        JSONObject json = XML.toJSONObject(xml);
        System.out.println(json.toString(4));
    }
}

Converting JSON to XML with org.json

public class JSONToXMLExample {
    public static void main(String[] args) {
        String json = "{\"user\":{\"id\":101,\"name\":\"John Doe\",\"email\":\"john.doe@example.com\"}}";
        JSONObject jsonObject = new JSONObject(json);
        String xml = XML.toString(jsonObject);
        System.out.println(xml);
    }
}

Best Practices for XML-JSON Conversion

  • Choose the right library based on your requirements (Jackson for flexibility, org.json for simplicity, JAXB for XML-heavy applications).
  • Handle special characters and encoding to prevent conversion issues.
  • Validate data before conversion to avoid incorrect transformations.
  • Use custom serializers/deserializers for complex structures.

External Resources

FAQs

1. Why should I convert XML to JSON?

JSON is lightweight and easier to parse, making it suitable for web applications.

2. What is the best library for XML-JSON conversion in Java?

Jackson is the most flexible, but org.json is simpler for basic conversions.

3. Can I convert XML to JSON without third-party libraries?

Java does not provide built-in XML-JSON conversion. External libraries like Jackson or org.json are required.

4. How do I handle missing fields during conversion?

Use default values or custom deserializers to handle missing fields.

5. Does XML have a direct equivalent of JSON arrays?

No, but XML lists can be mapped to JSON arrays with custom handling.

6. How can I prettify the JSON output?

Use ObjectMapper.writerWithDefaultPrettyPrinter() in Jackson.

7. What happens if the XML structure is inconsistent?

Ensure valid XML before conversion, as inconsistencies may cause errors.

8. Can Gson be used for XML-JSON conversion?

No, Gson is designed for JSON processing only.

9. Is XML still relevant compared to JSON?

Yes, XML is widely used in enterprise applications and configuration files.

10. Can I use JAXB for JSON conversion?

JAXB primarily handles XML but can be used with Jackson for JSON support.