在Python中将JSON转换为XML

Rya*_*eal 41 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),array和dict数据类型以及任意嵌套(yay recursion).

一旦8小时过去,我会将此作为答案发布.

Rya*_*eal 36

什么都没有立刻回来,所以我继续编写了一个解决这个问题的脚本.

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

https://github.com/quandyfactory/dict2xml

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


wmi*_*mil 14

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

将Python字典序列化为XML


die*_*cht 12

如果您没有这样的包裹,可以尝试:

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)
Run Code Online (Sandbox Code Playgroud)

例如:

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

结果:

<main>
        <aaa>
                10
        </aaa>
        <bbb>
                1
                2
                3
        </bbb>
</main>
Run Code Online (Sandbox Code Playgroud)