如何使用python将xml文件转换为JSON?

时间:2011-06-24 08:30:46

标签: python xml json xml-serialization

我有一个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可序列化的。

4 个答案:

答案 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 模式,例如类型定义。