在Python中将JSON转换为XML

时间:2012-01-24 14:45:47

标签: python xml json

我在SO上看到了一些关于如何将XML转换为JSON的问题,但我对其他方式感兴趣。是否有用于将JSON转换为XML的python库?


编辑:没有立刻回来,所以我继续写了一个解决这个问题的脚本。

Python已经允许你从JSON转换为本机dict(使用json或者在版本< 2.6,simplejson中),所以我编写了一个将原生dicts转换为XML字符串的库

https://github.com/quandyfactory/dict2xml

它支持int,float,boolean,string(和unicode),数组和dict数据类型以及任意嵌套(yay recursion)。

我会在8小时后将此作为答案发布。

5 个答案:

答案 0 :(得分:34)

没有任何东西马上回来,所以我继续编写了一个解决这个问题的脚本。

Python已经允许你从JSON转换为本机dict(使用json或者在版本< 2.6,simplejson中),所以我编写了一个将原生dicts转换为XML字符串的库

https://github.com/quandyfactory/dict2xml

它支持int,float,boolean,string(和unicode),数组和dict数据类型以及任意嵌套(yay recursion)。

答案 1 :(得分:14)

使用json.loads将其加载到dict中,然后使用此问题中的任何内容......

Serialize Python dictionary to XML

答案 2 :(得分:11)

如果您没有这样的套餐,可以尝试:

def json2xml(json_obj, line_padding=""):
    result_list = list()

    json_obj_type = type(json_obj)

    if json_obj_type is list:
        for sub_elem in json_obj:
            result_list.append(json2xml(sub_elem, line_padding))

        return "\n".join(result_list)

    if json_obj_type is dict:
        for tag_name in json_obj:
            sub_obj = json_obj[tag_name]
            result_list.append("%s<%s>" % (line_padding, tag_name))
            result_list.append(json2xml(sub_obj, "\t" + line_padding))
            result_list.append("%s</%s>" % (line_padding, tag_name))

        return "\n".join(result_list)

    return "%s%s" % (line_padding, json_obj)

例如:

s='{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
j = json.loads(s)
print(json2xml(j))

结果:

<main>
        <aaa>
                10
        </aaa>
        <bbb>
                1
                2
                3
        </bbb>
</main>

答案 3 :(得分:0)

from json import loads
from dicttoxml import dicttoxml

s='{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
xml = dicttoxml(loads(s))

或者如果您的数据像我一样经常存储在大熊猫data.frame中,

df['xml'] = df['json'].apply(lambda s: dicttoxml(json.loads(s))

答案 4 :(得分:0)

使用dicttoxml JSON 直接转换为 XML

安装
pip install dicttoxml

easy_install dicttoxml

In [2]: from json import loads

In [3]: from dicttoxml import dicttoxml

In [4]: json_obj = '{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'

In [5]: xml = dicttoxml(loads(json_obj))

In [6]: print(xml)
<?xml version="1.0" encoding="UTF-8" ?><root><main type="dict"><aaa type="str">10</aaa><bbb type="list"><item type="int">1</item><item type="int">2</item><item type="int">3</item></bbb></main></root>

In [7]: xml = dicttoxml(loads(json_obj), attr_type=False)

In [8]: print(xml)
<?xml version="1.0" encoding="UTF-8" ?><root><main><aaa>10</aaa><bbb><item>1</item><item>2</item><item>3</item></bbb></main></root>

有关dicttoxml

的更多信息