Reputation: 7954
I have an XML file which I want to convert into JSON file using python, but its nt working out for me.
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
The above XML file I am parsing using ElementTree and giving it to Simplejson to serialize like this:
from xml.etree import ElementTree as ET
import simplejson
tree = ET.parse(Xml_file_path)
simplejson.dumps(tree)
It gives me an error: TypeError: xml.etree.ElementTree.ElementTree object at 0x00C49DD0 is not JSON serializable.
Upvotes: 11
Views: 38220
Reputation: 8850
See xml_to_json. It supports xsd schema, e.g. type definitions.
Upvotes: 0
Reputation: 21
You can try to use xmljson. The code for the same is
from xmljson import badgerfish as bf
from xml.etree.ElementTree import fromstring
s = '''<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>'''
json.dumps(bf.data(fromstring(s)))
Upvotes: 2
Reputation: 13553
Another option is xmltodict (full disclosure: I wrote it). It can help you convert your XML to a dict+list+string structure, following this "standard". It is Expat-based, so it's very fast and doesn't need to load the whole XML tree in memory.
Once you have that data structure, you can serialize it to JSON:
import xmltodict, json
o = xmltodict.parse('<e> <a>text</a> <a>text</a> </e>')
json.dumps(o) # '{"e": {"a": ["text", "text"]}}'
Upvotes: 24
Reputation: 1002
This is probably what you are looking for:
https://github.com/mutaku/xml2json
import xml2json
s = '''<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>'''
print xml2json.xml2json(s)
Upvotes: 8