我有一个XML文件,我希望使用python将其转换为JSON文件,但它正在为我工作。
<?xml version="1.0"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
上面的XML文件我正在使用ElementTree进行解析并将其提供给Simplejson以进行序列化:
from xml.etree import ElementTree as ET
import simplejson
tree = ET.parse(Xml_file_path)
simplejson.dumps(tree)
它给出了一个错误:TypeError:0x00C49DD0处的xml.etree.ElementTree.ElementTree对象不是JSON可序列化的。
答案 0 :(得分:17)
另一种选择是xmltodict(完全披露:我写了它)。它可以帮助您将XML转换为dict + list + string结构,遵循此"standard"。它基于Expat,所以它非常快,不需要在内存中加载整个XML树。
拥有该数据结构后,您可以将其序列化为JSON:
import xmltodict, json
o = xmltodict.parse('<e> <a>text</a> <a>text</a> </e>')
json.dumps(o) # '{"e": {"a": ["text", "text"]}}'
答案 1 :(得分:7)
这可能就是你要找的东西:
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)
答案 2 :(得分:2)
您可以尝试使用xmljson。相同的代码是
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)))
答案 3 :(得分:0)
见xml_to_json。它支持 xsd 模式,例如类型定义。