web-dev-qa-db-ja.com

PythonでJSONをXMLに変換

SOでXMLをJSONに変換する方法について尋ねる質問がいくつかありますが、私は他の方法に興味があります。python JSONをXMLに変換するためのライブラリ?


編集:すぐに戻ってこないので、先に進み、この問題を解決するスクリプトを作成しました。

PythonはすでにJSONからネイティブdictに変換することを許可しています(json、またはバージョン<2.6ではsimplejsonを使用)。したがって、ネイティブdictをXML文字列に変換するライブラリを作成しました。

https://github.com/quandyfactory/dict2xml

Int、float、boolean、string(およびunicode)、arrayおよびdictデータ型、および任意のネスト(ya​​y再帰)をサポートします。

8時間が経過したら、これを回答として投稿します。

41
Ryan McGreal

何もすぐには戻ってこなかったので、先に進み、この問題を解決するスクリプトを書きました。

PythonはすでにJSONからネイティブdictに変換することを許可しています(json、またはバージョン<2.6ではsimplejsonを使用)。したがって、ネイティブdictをXML文字列に変換するライブラリを作成しました。

https://github.com/quandyfactory/dict2xml

Int、float、boolean、string(およびunicode)、arrayおよびdictデータ型、および任意のネスト(ya​​y再帰)をサポートします。

35
Ryan McGreal

Json.loadsを使用して辞書にロードし、この質問から何かを使用します...

シリアル化Python辞書からXMLへ

14
wmil

そのようなパッケージがない場合は、次を試すことができます。

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)

例えば:

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

結果:

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

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

または、データがpandas data.frame私の場合:

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

dicttoxmlを使用して[〜#〜] json [〜#〜]を直接[ 〜#〜] xml [〜#〜]

インストール
pip install dicttoxml
または
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>

dicttoxml の詳細については

0
Anurag Misra