Convert JSON to XML in Python

前端 未结 5 743
野趣味
野趣味 2020-12-01 07:40

I see a number of questions on SO asking about ways to convert XML to JSON, but I\'m interested in going the other way. Is there a python library for converting JSON to XML?

相关标签:
5条回答
  • 2020-12-01 07:57

    Nothing came back right away, so I went ahead and wrote a script that solves this problem.

    Python already allows you to convert from JSON into a native dict (using json or, in versions < 2.6, simplejson), so I wrote a library that converts native dicts into an XML string.

    https://github.com/quandyfactory/dict2xml

    It supports int, float, boolean, string (and unicode), array and dict data types and arbitrary nesting (yay recursion).

    0 讨论(0)
  • 2020-12-01 08:08

    Load it into a dict using json.loads then use anything from this question...

    Serialize Python dictionary to XML

    0 讨论(0)
  • 2020-12-01 08:09

    If you don't have such a package, you can try:

    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)
    

    For example:

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

    Result:

    <main>
            <aaa>
                    10
            </aaa>
            <bbb>
                    1
                    2
                    3
            </bbb>
    </main>
    
    0 讨论(0)
  • 2020-12-01 08:11

    Use dicttoxml to convert JSON directly to XML

    Installation
    pip install dicttoxml
    or
    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>
    

    For more information on dicttoxml

    0 讨论(0)
  • 2020-12-01 08:11
    from json import loads
    from dicttoxml import dicttoxml
    
    s='{"main" : {"aaa" : "10", "bbb" : [1,2,3]}}'
    xml = dicttoxml(loads(s))
    

    Or if your data is stored in a pandas data.frame as mine often is:

    df['xml'] = df['json'].apply(lambda s: dicttoxml(json.loads(s))
    
    0 讨论(0)
提交回复
热议问题