Python – JSON to XML

A JSON file is a file that stores simple data structures and objects in JavaScript Object Notation (JSON) format, which is a standard data interchange format. It is primarily used for transmitting data between a web application and a server.A JSON object contains data in the form of a key/value pair. The keys are strings and the values are the JSON types. Keys and values are separated by a colon. Each entry (key/value pair) is separated by a comma. JSON files are lightweight, text-based, human-readable, and can be edited using a text editor.

Note: For more information, refer to Working With JSON Data in Python

XML is a markup language which is designed to store data. It is case sensitive. XML offers you to define markup elements and generate customized markup language. The basic unit in the XML is known as an element. The XML language has no predefined tags. It simplifies data sharing, data transport, platform changes, data availability Extension of an XML file is .xml

Note: For more information, refer to XML | Basics

Both JSON and XML file format are used for transferring data between client and server.
However, they both serve the same purpose though differ in their on way.



Comparison between JSON and XML

JSON XML
JSON object has a type XML data is typeless
JSON types: string, number, array, Boolean All XML data should be string
Data is readily accessible as JSON objects XML data needs to be parsed
JSON is supported by most browsers Cross-browser XML parsing can be tricky
JSON has no display capabilities XML offers the capability to display data because it is a markup language
JSON supports only text and number data type. XML support various data types such as number, text, images, charts, graphs, etc. It also provides options for transferring the structure or format of the data with actual data.
Retrieving value is easy Retrieving value is difficult
Supported by many Ajax toolkit Not fully supported by Ajax toolkit
A fully automated way of deserializing/serializing JavaScript Developers have to write JavaScript code to serialize/de-serialize from XML
Native support for object The object has to be express by conventions – mostly missed use of attributes and elements.
It supports only UTF-8 encoding. It supports various encoding
It doesn’t support comments. It supports comments.
JSON files are easy to read as compared to XML. XML documents are relatively more difficult to read and interpret.
It does not provide any support for namespaces It supports namespaces.
It is less secured. It is more secure than JSON.

Handling JSON in Python 3

To handle the JSON file format, Python provides a module named json.

STEP 1: import the json module

import json as JS

STEP 2: import xml.etree.ElementTree module

import xml.etree.ElementTree as ET

STEP 3: Read the json file
here, “data” is the variable in which we have loaded our JSON data.

with open("quiz.json", "r") as json_file:
    data = JS.load(json_file);

STEP 4: Build the root element
Every xml file must have exactly one root element

root = ET.Element("quiz")

STEP 5: Build the subelements of the root
SubElement takes two parameters:

  • root- It is the name of the variable where root element is stored.
  • subelement_name: It is the name of subelement.Example:
Maths = ET.SubElement(root, "maths")

STEP 6: Build the tree of xml document

tree = ET.ElementTree(root)

STEP 7: Write the xml to quiz.xml file

tree.write("quiz.xml")

Note : XML elements does not support integer values so we need to convert them to string.

Example:

JSON File:

python-json-to-xml

filter_none

edit
close

play_arrow

link
brightness_4
code

# Program to read JSON file 
# and generate its XML file
   
# Importing json module and xml
# module provided by python
import json as JS
import xml.etree.ElementTree as ET
   
# Opening JSON file in read mode
with open("myfile3.json", "r") as json_file:
   
    # loading json file data 
    # to variable data
    data = JS.load(json_file);
   
    # Building the root element 
    # of the xml file
    root = ET.Element("quiz")
   
    # Building the sub root elements
    # We don't add text since the value 
    # associated with subelement is a 
    # python dictionary
    Maths = ET.SubElement(root, "maths")
   
    # Building subelement of maths as q1
    Q1 = ET.SubElement(Maths, "q1")
    ET.SubElement(Q1, "question").
    text = data["quiz"]["maths"]["q1"]["question"]
   
    # Building multiple subelements with name options to hold different values
    # Xml elements cannot hold integer values so we need to
    # convert them to string
    ET.SubElement(Q1, "options").text = str(data["quiz"]
                                            ["maths"]["q1"]
                                            ["options"][0])
      
    ET.SubElement(Q1, "options").text = str(data["quiz"]
                                            ["maths"]["q1"]
                                            ["options"][1])
      
    ET.SubElement(Q1, "options").text = str(data["quiz"]
                                            ["maths"]["q1"]
                                            ["options"][2])
      
    ET.SubElement(Q1, "options").text = str(data["quiz"]
                                            ["maths"]["q1"]
                                            ["options"][3])
      
    ET.SubElement(Q1, "answer").text = str(data["quiz"]
                                           ["maths"]["q1"]
                                           ["answer"])
   
    # Building subelement of maths as q2
    Q2 = ET.SubElement(Maths, "q2")
    ET.SubElement(Q2, "question").text = data["quiz"]
    ["maths"]["q2"]["question"]
      
    # Building multiple subelements 
    # with name options to hold
    # different values
    ET.SubElement(Q2, "options").text = str(data["quiz"]
                                            ["maths"]
                                            ["q2"]
                                            ["options"][0])
      
    ET.SubElement(Q2, "options").text = str(data["quiz"]
                                            ["maths"]
                                            ["q2"]
                                            ["options"][1])
      
    ET.SubElement(Q2, "options").text = str(data["quiz"]
                                            ["maths"]["q2"]
                                            ["options"][2])
      
    ET.SubElement(Q2, "options").text = str(data["quiz"]
                                            ["maths"]["q2"]
                                            ["options"][3])
      
    ET.SubElement(Q2, "answer").text = str(data["quiz"]
                                           ["maths"]["q2"]
                                           ["answer"])
   
    # Building the tree of the xml
    # elements using the root element
    tree = ET.ElementTree(root)
   
    # Writing the xml to output file
    tree.write("quiz.xml")

chevron_right


Output:

python-json-to-xml




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.