如何用Python将XML转换为JSON?
我在网上看到过不少复杂的把XML转成JSON的代码,和Stack的用户交流了一段时间后,我觉得这群人能提供的帮助比谷歌搜索结果的前几页要多得多。
现在,我们正在解析一个天气信息源,需要在很多网站上填充天气小部件。我们现在在寻找基于Python的解决方案。
这个公开的weather.com的RSS源是我们要解析的一个好例子(我们实际的weather.com源包含了更多信息,因为我们和他们有合作关系)。
简单来说,我们应该如何用Python把XML转换成JSON呢?
19 个回答
37
你可以使用 xmljson 这个库来根据不同的 XML和JSON转换规则 进行转换。
比如说,这段XML:
<p id="1">text</p>
通过 BadgerFish规则 转换后变成了这个:
{
'p': {
'@id': 1,
'$': 'text'
}
}
而通过 GData规则 转换后变成了这个(属性不被支持):
{
'p': {
'$t': 'text'
}
}
... 还有通过 Parker规则 转换后变成了这个(属性不被支持):
{
'p': 'text'
}
你可以用相同的规则在XML和JSON之间互相转换:
>>> import json, xmljson
>>> from lxml.etree import fromstring, tostring
>>> xml = fromstring('<p id="1">text</p>')
>>> json.dumps(xmljson.badgerfish.data(xml))
'{"p": {"@id": 1, "$": "text"}}'
>>> xmljson.parker.etree({'ul': {'li': [1, 2]}})
# Creates [<ul><li>1</li><li>2</li></ul>]
说明:我是这个库的作者。希望它能帮助到未来的用户。
70
XML和JSON之间并没有一种“完全对应”的关系,所以把它们相互转换时,你需要先搞清楚你想要用结果做什么。
不过,Python的标准库里有几个可以解析XML的模块(比如DOM、SAX和ElementTree)。从Python 2.6开始,json
模块也支持将Python的数据结构转换成JSON,反之亦然。
所以,相关的工具和基础设施都是已经准备好的。