How to Convert XML to JSON in Python
- Understanding XML and JSON Formats
- Using xmltodict Library
- Using ElementTree and json Libraries
- Using defusedxml for Security Considerations
- Conclusion
- FAQ

In today’s data-driven world, the ability to work with various data formats is essential for developers and data scientists alike. XML and JSON are two of the most commonly used data formats, each serving its unique purpose. XML, with its structured and hierarchical nature, is often used in web services and configuration files, while JSON has gained popularity for its lightweight, easy-to-read format, especially in web applications.
In this tutorial, we will explore how to convert XML data to JSON format using Python. Whether you’re working on a personal project or a professional application, mastering this conversion will enhance your data manipulation skills and improve your workflow.
Understanding XML and JSON Formats
Before diving into the conversion process, it’s essential to grasp the fundamental differences between XML and JSON. XML, or eXtensible Markup Language, is designed to store and transport data in a structured way. It uses tags to define elements and attributes, making it both human-readable and machine-readable. JSON, or JavaScript Object Notation, is a lightweight data interchange format that is easy for humans to read and write and easy for machines to parse and generate.
The conversion from XML to JSON is often necessary when integrating systems that utilize different data formats. Python provides several libraries that facilitate this conversion, making the process straightforward and efficient.
Using xmltodict Library
One of the most popular methods for converting XML to JSON in Python is by using the xmltodict
library. This library simplifies the process of converting XML data into a Python dictionary, which can then be easily transformed into JSON format.
First, you’ll need to install the xmltodict
library if you haven’t already. You can do this using pip:
pip install xmltodict
Once you have the library installed, you can use the following code to convert XML to JSON:
import xmltodict
import json
xml_data = '''<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>'''
dict_data = xmltodict.parse(xml_data)
json_data = json.dumps(dict_data)
print(json_data)
Output:
{"note": {"to": "Tove", "from": "Jani", "heading": "Reminder", "body": "Don't forget me this weekend!"}}
In this example, we first import the necessary libraries: xmltodict
for parsing XML and json
for converting the dictionary to JSON. We define a sample XML string that represents a simple note. The xmltodict.parse()
function converts the XML string into a Python dictionary. Finally, we use json.dumps()
to convert the dictionary into a JSON string, which we print out. This method is efficient and works well for XML documents of various complexities.
Using ElementTree and json Libraries
Another effective way to convert XML to JSON in Python is by using the built-in xml.etree.ElementTree
library, which is part of the standard library. This method allows you to parse XML and manually construct a dictionary before converting it to JSON.
Here’s how you can do it:
import xml.etree.ElementTree as ET
import json
xml_data = '''<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>'''
root = ET.fromstring(xml_data)
dict_data = {child.tag: child.text for child in root}
json_data = json.dumps(dict_data)
print(json_data)
Output:
{"to": "Tove", "from": "Jani", "heading": "Reminder", "body": "Don't forget me this weekend!"}
In this approach, we begin by importing the necessary libraries. We define the same sample XML string as before. Using ET.fromstring()
, we parse the XML string and obtain the root element. We then create a dictionary comprehension that iterates over the child elements of the root, extracting their tags and text values. Finally, we convert the dictionary to a JSON string using json.dumps()
and print the result. This method provides more control over the parsing process and can be customized to handle more complex XML structures.
Using defusedxml for Security Considerations
When working with XML data, security is a significant concern, especially when dealing with untrusted sources. The defusedxml
library is a great choice for safely parsing XML in Python. It prevents various XML-related attacks, such as entity expansion attacks.
To use defusedxml
, you first need to install it:
pip install defusedxml
Once installed, you can convert XML to JSON as follows:
from defusedxml.ElementTree import fromstring
import json
xml_data = '''<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>'''
root = fromstring(xml_data)
dict_data = {child.tag: child.text for child in root}
json_data = json.dumps(dict_data)
print(json_data)
Output:
{"to": "Tove", "from": "Jani", "heading": "Reminder", "body": "Don't forget me this weekend!"}
In this example, we import the fromstring
function from the defusedxml.ElementTree
module to parse the XML data securely. The rest of the code remains similar to the previous example, where we create a dictionary from the XML elements and convert it to JSON. By using defusedxml
, you ensure that your application is protected from common XML vulnerabilities while still achieving the conversion.
Conclusion
Converting XML to JSON in Python is a straightforward process that can be accomplished using various libraries. Whether you choose xmltodict
, ElementTree
, or defusedxml
, each method provides a unique approach to handle XML data efficiently. By mastering these techniques, you can enhance your data manipulation skills and ensure your applications can work with different data formats seamlessly. As you continue to explore the capabilities of Python, you’ll find that these skills are invaluable in today’s diverse programming landscape.
FAQ
-
What is the difference between XML and JSON?
XML is a markup language that uses tags to define data, while JSON is a lightweight data interchange format that is easier for humans to read and write. -
Can I convert larger XML files to JSON using the same methods?
Yes, the methods discussed can handle larger XML files, but you may need to manage memory usage effectively for very large files. -
Is it safe to parse XML from untrusted sources?
It is not safe to parse XML from untrusted sources without using libraries likedefusedxml
, which provide security against XML-related attacks. -
Are there any performance differences between the methods?
Yes, performance can vary depending on the size of the XML data and the complexity of the structure.xmltodict
is often faster for simpler XML, whileElementTree
provides more control. -
Can I convert JSON back to XML using Python?
Yes, you can convert JSON back to XML using libraries likedicttoxml
, which allows you to easily transform JSON data into XML format.
Related Article - Python XML
- How to Convert XML to CSV Using Python
- How to Pretty Print XML Output Pretty in Python
- How to Create an XML Parser in Python
- How to Convert XML to Dictionary in Python