PythonでJSONとXMLの変換とデータマッピングを行う方法

この記事では、Pythonを使用してJSONファイルとXMLファイルの変換、およびデータのマッピングを行う方法について詳しく解説します。具体的なコード例、その解説、そして応用例を含めています。

目次

はじめに

JSON(JavaScript Object Notation)とXML(eXtensible Markup Language)は、データの表現や転送によく使用される形式です。どちらもテキストベースで人間が読みやすく、また機械でも解析しやすい特長があります。しかし、それぞれ異なるシステムや用途でよく使われているため、変換やデータマッピングが必要な場合があります。

必要なパッケージ

この記事での実装例では、以下のPythonのパッケージが必要です。

  • json
  • xml.etree.ElementTree

JSONからXMLへの変換

基本のコード

以下にJSONからXMLへの基本的な変換コードを示します。


import json
import xml.etree.ElementTree as ET

# JSONデータを読み込む
with open('data.json', 'r') as f:
    json_data = json.load(f)

# XMLのルート要素を作成
root = ET.Element('root')

# JSONデータをXMLに変換
for key, value in json_data.items():
    child = ET.SubElement(root, key)
    child.text = str(value)

# XMLデータを保存
tree = ET.ElementTree(root)
tree.write('data.xml')

コードの解説

  • import jsonimport xml.etree.ElementTree as ETで必要なパッケージをインポートしています。
  • JSONデータはwith open('data.json', 'r') as f:で読み込んでいます。
  • ET.Element('root')でXMLのルート要素を作成しています。
  • for key, value in json_data.items():でJSONの各要素をXMLの子要素として追加しています。

補足: 辞書内のリスト

JSONデータが辞書内にリストを持っている場合、上記の基本コードでは対応できません。その場合は以下のようにします。


# 省略(上記と同じ部分)

# JSONデータをXMLに変換(リスト対応版)
for key, value in json_data.items():
    if isinstance(value, list):
        list_element = ET.SubElement(root, key)
        for i, item in enumerate(value):
            child = ET.SubElement(list_element, f'item_{i}')
            child.text = str(item)
    else:
        child = ET.SubElement(root, key)
        child.text = str(value)

応用例

例1: XMLからJSONへの変換


# XMLデータを読み込む
tree = ET.parse('data.xml')
root = tree.getroot()

# XMLデータをJSONに変換
json_data = {}
for child in root:
    json_data[child.tag] = child.text

# JSONデータを保存
with open('data_from_xml.json', 'w') as f:
    json.dump(json_data, f)

例2: JSONとXMLのデータマッピング

JSONとXMLのデータ形式が異なる場合、特定のマッピングルールに基づいて変換できます。


# JSONデータとXMLデータの読み込みは省略

# マッピングルール
mapping_rule = {
    'name_json': 'name_xml',
    'age_json': 'age_xml'
}

# マッピングに基づいてJSONデータをXMLに変換
root = ET.Element('root')
for json_key, xml_key in mapping_rule.items():
    child = ET.SubElement(root, xml_key)
    child.text = str(json_data[json_key])

# XMLデータを保存
tree = ET.ElementTree(root)
tree.write('mapped_data.xml')

まとめ

Pythonを使用してJSONとXMLの変換、およびデータのマッピングが簡単に行えることを示しました。実際のプロジェクトに応用する際は、必要なパッケージをインストールし、適切なマッピングルールを設定してください。

コメント

コメントする

目次