Python - JSON to XML - GeeksforGeeks

21 Apr, 2020
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.
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 filehere, “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 elementEvery xml file must have exactly one root element
root = ET.Element("quiz")
STEP 5: Build the subelements of the rootSubElement 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:
# Program to read JSON file # and generate its XML file   # Importing json module and xml# module provided by pythonimport json as JSimport xml.etree.ElementTree as ET   # Opening JSON file in read modewith 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")
Output:
Python-json
Python
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Python Dictionary
Read a file line by line in Python
Enumerate() in Python
How to Install PIP on Windows ?
Iterate over a list in Python
Different ways to create Pandas Dataframe
Python String | replace()
Create a Pandas DataFrame from Lists
Reading and Writing to text files in Python
*args and **kwargs in Python