Converter o JSON em XML em Python
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.5 answers
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).
Coloca-o num dict usando o json.cargas, em seguida, usar qualquer coisa a partir desta pergunta...
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>
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))
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