json形式をyaml形式に相互変換を試しました
1.概要
Pythonプログラムでデータ定義用途でjson形式を良く利用していました。yaml形式でデータ定義されたものを参照する機会があり、jsonとyamlの関係について、テストプログラムで調べてみました。Pythonプログラムは、json形式もyaml形式も辞書(dic)になるので同じ扱いになります。また、json形式をyaml形式に変換、yaml形式をjson形式へ変換も実施してみました。この内容を記述します。
2.詳細
(a) 試験データ作成
(b) 試験プログラム作成
(c) 実行結果
(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プログラムからは同じ扱いになります。これらを異なる形式へ変換する処理も組み込まれていますが、入力した形とは少し異なる形になってしまいます。
参考
[外部サイト参照]
PythonでのJSONとYAML/TOMLの相互変換
コメント
コメントを投稿