Converter o JSON em XML em Python

Vejo uma série de perguntas sobre como converter XML para JSON, mas estou interessado em ir pelo outro lado. Existe uma biblioteca python para converter JSON para XML?


Edit: nada voltou imediatamente, então eu fui em frente e escrevi um script que resolve este problema.

O Python já lhe permite converter do JSON para um dict nativo (usando json ou, nas versões < 2.6, simplejson), Então eu escrevi uma biblioteca que converte dicts nativas em um XML cadeia.

Https://github.com/quandyfactory/dict2xml

Ele suporta int, float, booleano, string (e unicode), array e dict tipos de dados e nidificação arbitrária (recursão yay).

Publicarei isto como resposta quando passarem 8 horas.

Author: Ryan McGreal, 2012-01-24

5 answers

[[3] nada voltou imediatamente, então eu fui em frente e escrevi um roteiro que resolve este problema.

O Python já lhe permite converter do JSON para um dict nativo (usando json ou, nas versões simplejson), Então eu escrevi uma biblioteca que converte dicts nativas em uma string XML.

Https://github.com/quandyfactory/dict2xml

Ele suporta int, float, booleano, string (e unicode), array e dict tipos de dados e nidificação arbitrária (recursão yay).

 29
Author: Ryan McGreal, 2012-01-24 23:56:55

Coloca-o num dict usando o json.cargas, em seguida, usar qualquer coisa a partir desta pergunta...

Serializar o dicionário Python para XML

 12
Author: wmil, 2017-05-23 12:02:41

Se você não tem esse pacote, você pode tentar:

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)

Por exemplo:

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

Resultado:

<main>
        <aaa>
                10
        </aaa>
        <bbb>
                1
                2
                3
        </bbb>
</main>
 9
Author: diemacht, 2013-10-20 06:30:42
from json import loads
from dicttoxml import dicttoxml

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

Ou se os teus dados são armazenados num pandas data.frame como os meus frequentemente são:

df['xml'] = df['json'].apply(lambda s: dicttoxml(json.loads(s))
 0
Author: cangers, 2018-08-03 15:31:22

Utilizar dicttoxml para converter JSON directamente para XML

Instalação
pip install dicttoxml
ou
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>

Para mais informações sobre dictoxml

 0
Author: Anurag Misra, 2018-09-28 12:04:09