json形式をyaml形式に相互変換を試しました

1.概要

Pythonプログラムでデータ定義用途でjson形式を良く利用していました。yaml形式でデータ定義されたものを参照する機会があり、jsonとyamlの関係について、テストプログラムで調べてみました。Pythonプログラムは、json形式もyaml形式も辞書(dic)になるので同じ扱いになります。また、json形式をyaml形式に変換、yaml形式をjson形式へ変換も実施してみました。この内容を記述します。

2.詳細

(a) 試験データ作成

test.json を以下のように作成

{
    "node_a": {
        "type": "int",
        "length": "4"
    },
    "node_b": {
        "type": "float",
        "length": "8"
    },
    "node_c": {
        "type": "char",
        "length": "1"
    }
}

test.yamlを以下のように作成

node_a:
    type: "int"
    length: "4"
node_b:
    type: "float"
    length: "8"
node_c:
    type: "char"
    length: "1"

(b) 試験プログラム作成

#!/usr/bin/python3

import yaml
import json

class YamlJson:

    def ReadJson(self, filename):
        with open(filename, 'r') as f:
            obj = json.load(f)
            conv = yaml.dump(obj)
            return obj, conv

    def ReadYaml(self, filename):
        with open(filename, 'r') as f:
            obj = yaml.safe_load(f)
            conv = json.dumps(obj)
            return obj, conv

    def PrintObj(self, obj):
        print(obj)
        print()
        print(obj['node_a'])
        print(obj['node_a']['type'])
        print(obj['node_a']['length'])
        print(obj['node_b'])
        print(obj['node_c'])

if  __name__ == '__main__':
    obj = YamlJson()
    jsony, convj = obj.ReadJson('./test.json')
    obj.PrintObj(jsony)
    print(convj)
    print()
    yamlj, convy = obj.ReadYaml('./test.yaml')
    obj.PrintObj(yamlj)
    print(convy)

(c) 実行結果

json形式もyaml形式も読込み時点で辞書形式になり、Pythonプログラムからは同じ扱いになります。これらを異なる形式へ変換する処理も組み込まれていますが、入力した形とは少し異なる形になってしまいます。

3.所見

json形式やyaml形式でデータを受け渡す機会が増加しました。以前はテキストファイルを利用して、中身のフォーマットは独自形式でした。これでは統一性を取るのが難しいので形式をjson形式やyaml形式を利用するようになったと思います。

今回調べた結果、Pythonでは、どちらの形式もPythonの辞書形式に変換されて同じ扱いになることを確認できました。Java ScriptではJson形式を利用することが多かった気がしますが、多分、変換して同じように利用できると思っています。

参考

[外部サイト参照]
PythonでのJSONとYAML/TOMLの相互変換

コメント

過去30日間に良く読まれた記事

miniPCのBMAXでWindows11のsecure boot設定漏れでトラブル発生

LinuxMint/ubuntuにWine 11導入を試しました ( LinuxMint 21.3 / 22.3 ubuntu 22.04 / 26.04 Wine 11.0 / 11.6 / 11.8 / 11.13 )

Windows95/98のPCゲームをUbuntu/LinuxMintの最新PCで楽しむ方法 ( KVM / Wine / dosbox-x / midi )