wake-up-neo.com

Konvertieren Sie JSON in XML in Python

Ich sehe eine Reihe von Fragen zu SO, in denen nach Möglichkeiten zur Konvertierung von XML in JSON gefragt wird, aber ich bin daran interessiert, den anderen Weg zu gehen. Gibt es eine Python-Bibliothek zum Konvertieren von JSON in XML?


Edit: Nichts kam sofort wieder, also schrieb ich ein Skript, das dieses Problem löst. 

In Python können Sie bereits von JSON in native Diktate konvertieren (mit json oder in Versionen <2.6 simplejson). Daher habe ich eine Bibliothek geschrieben, die native Diktate in einen XML-String konvertiert.

https://github.com/quandyfactory/dict2xml

Es unterstützt die Datentypen int, float, boolean, string (und unicode), Array und Dict sowie beliebige Schachtelung (yay-Rekursion). 

Ich werde dies als Antwort posten, sobald 8 Stunden vergangen sind.

37
Ryan McGreal

Es kam nichts zurück, also schrieb ich ein Skript, das dieses Problem löst. 

In Python können Sie bereits von JSON in native Diktate konvertieren (mit json oder in Versionen <2.6 simplejson). Daher habe ich eine Bibliothek geschrieben, die native Diktate in einen XML-String konvertiert.

https://github.com/quandyfactory/dict2xml

Es unterstützt die Datentypen int, float, boolean, string (und unicode), Array und Dict sowie beliebige Schachtelung (yay-Rekursion). 

33
Ryan McGreal

Laden Sie es mit json.loads in ein Diktierfeld und verwenden Sie dann alles aus dieser Frage ...

Python-Wörterbuch in XML serialisieren

13
wmil

Wenn Sie kein solches Paket haben, können Sie Folgendes versuchen:

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)

Zum Beispiel:

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

Ergebnis:

<main>
        <aaa>
                10
        </aaa>
        <bbb>
                1
                2
                3
        </bbb>
</main>
10
diemacht
from json import loads
from dicttoxml import dicttoxml

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

Oder wenn Ihre Daten in einem Pandas data.frame gespeichert sind, wie meine oft:

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

Verwenden Sie dicttoxml, um JSON direkt in XML zu konvertieren.

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

Weitere Informationen zu dicttoxml

0
Anurag Misra