PythonでXMLをJSONに変換する方法と、XMLを辞書形式に変換する方法。

今日はPythonでXMLをJSONや辞書に変換する方法を学びます。Pythonのxmltodictモジュールを使ってXMLファイルを読み込み、辞書またはJSONデータに変換することができます。また、大きなXMLファイルに対してもストリーミングで処理し、辞書に変換することもできます。コーディングの前に、XML変換がなぜ必要なのかを理解しましょう。

XMLを辞書/JSONに変換する

XMLファイルは徐々に時代遅れになってきていますが、まだこの形式を使用している大規模なウェブシステムもあります。XMLはJSONよりも重く、そのため、ほとんどの開発者は自分たちのアプリケーションで後者を好んで使用します。アプリケーションがどのソースによって提供されたXMLを理解する必要がある場合、それをJSONに変換する作業は手間がかかることがあります。Pythonのxmltodictモジュールを使用すると、この作業を非常に簡単かつ直感的に行うことができます。

xmltodictを使い始める

最初にxmltodictモジュールで始めることができますが、まずインストールが必要です。インストールは主にpipを使用します。

xmltodictモジュールをインストールしてください。

Python Package Index (pip)を使用して、xmltodictモジュールをインストールする方法を以下に示します。

pip install xmltodict
python install xmltodict module
sudo apt install python-xmltodict

もう一つのプラスポイントは、このモジュールに公式のDebianパッケージがあることです。

PythonのXMLをJSONに変換する

このモジュールを試す最適な場所は、主に行われるべき操作であるXMLからJSONへの変換を行うことです。これを行うためのコードスニペットを見てみましょう。

import xmltodict
import pprint
import json

my_xml = """
    <audience>
      <id what="attribute">123</id>
      <name>Shubham</name>
    </audience>
"""

pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(xmltodict.parse(my_xml)))
python xml to json

XMLファイルをJSONに変換する

XMLデータをコード自体に保持することは、常に可能でも現実的でもありません。通常、データはデータベースまたはファイルに保持します。また、ファイルを直接選択し、JSONに変換することもできます。XMLファイルでの変換方法について、コードの断片を見てみましょう。

import xmltodict
import pprint
import json

with open('person.xml') as fd:
    doc = xmltodict.parse(fd.read())

pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))
python xml file to json

PythonのXMLをDictに変換

モジュール名そのものが示すように、xmltodictは提供したXMLデータを単純なPythonの辞書に変換します。そのため、辞書のキーを使用してデータに簡単にアクセスすることができます。以下はサンプルプログラムです。

import xmltodict
import pprint
import json

my_xml = """
    <audience>
      <id what="attribute">123</id>
      <name>Shubham</name>
    </audience>
"""
my_dict = xmltodict.parse(my_xml)
print(my_dict['audience']['id'])
print(my_dict['audience']['id']['@what'])
python xml to dict

XMLでネームスペースをサポートする

通常、XMLデータにはXMLファイルで提供されるデータの範囲を定義する一連の名前空間があります。JSON形式に変換する際には、これらの名前空間がJSON形式でも保持される必要があります。以下のサンプルXMLファイルを考えてみましょう。

<root xmlns="https://defaultns.com/"
        xmlns:a="https://a.com/">
    <audience>
        <id what="attribute">123</id>
        <name>Shubham</name>
    </audience>
</root>

以下は、JSON形式でもXML名前空間を含める方法のサンプルプログラムです。

import xmltodict
import pprint
import json

with open('person.xml') as fd:
    doc = xmltodict.parse(fd.read(), process_namespaces=True)

pp = pprint.PrettyPrinter(indent=4)
pp.pprint(json.dumps(doc))
xml namespace to dict and json

JSONをXMLに変換

XMLをJSONに変換することがこのモジュールの主な目的ですが、xmltodictはJSONをXML形式に変換する逆の操作もサポートしています。プログラム自体にJSONデータを提供します。以下にサンプルプログラムを示します。

import xmltodict

student = {
  "data" : {
    "name" : "Shubham",
    "marks" : {
      "math" : 92,
      "english" : 99
    },
    "id" : "s387hs3"
  }
}

print(xmltodict.unparse(student, pretty=True))
python json to xml
import xmltodict

student = {
    "name" : "Shubham",
    "marks" : {
        "math" : 92,
        "english" : 99
    },
    "id" : "s387hs3"
}

print(xmltodict.unparse(student, pretty=True))
python json to xml unparse error

結論

このレッスンでは、XMLをJSONに変換したり、その逆を行うために使用できる優れたPythonモジュールについて学びました。また、xmltodictモジュールを使用してXMLを辞書に変換する方法も学びました。参考資料:APIドキュメント

コメントを残す 0

Your email address will not be published. Required fields are marked *