使用Python将XML转换为JSON?

2024-04-19 00:10:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在web上看到了相当一部分笨拙的XML->;JSON代码,并且与Stack的用户进行了一段时间的交互,我相信这群人能够比Google结果的前几页提供更多帮助。

所以,我们正在解析一个天气提要,我们需要在许多网站上填充天气小部件。我们正在研究基于Python的解决方案。

这个公共的weather.com RSS feed是一个很好的例子,说明我们将要解析的内容(我们的实际weather.com feed包含额外的信息,因为有一个合作伙伴w/them)。

简而言之,我们应该如何使用Python将XML转换为JSON?


Tags: 代码用户gtcomwebjsonstack网站
3条回答

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"]}}'

在XML和JSON之间没有“一对一”的映射,因此将一个映射转换为另一个映射必然需要理解您想要用结果做什么。

也就是说,Python的标准库有several modules for parsing XML(包括DOM、SAX和ElementTree)。从Python 2.6开始,^{} module中就包含了将Python数据结构转换为JSON和从JSON转换数据结构的支持。

所以基础设施就在那里。

可以使用xmljson库使用不同的XML JSON conventions进行转换。

例如,此XML:

<p id="1">text</p>

通过BadgerFish convention转换为:

{
  'p': {
    '@id': 1,
    '$': 'text'
  }
}

并通过GData convention进入此(不支持属性):

{
  'p': {
    '$t': 'text'
  }
}

。。。并通过Parker convention进入此(不支持属性):

{
  'p': 'text'
}

可以使用相同的方法从XML转换为JSON,从JSON转换为XML 惯例:

>>> 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>]

披露:我写了这个图书馆。希望对未来的搜索者有所帮助。

相关问题 更多 >