Edited at

[Python] [Tips] ワンライナー(?)でyaml->json

ワンライナーである必要なくない?

ちょくちょく、やりたくなるのでメモ。

例えば、カレントディレクトリのdocker-compose.ymlをjsonに変換する場合

python -c "import yaml; import json; print(json.dumps(yaml.load(open('docker-compose.yml').read()), indent=2))"

出力例

{

"version": "2",
"services": {
"swagger-editor": {
"image": "swaggerapi/swagger-editor",
"container_name": "swagger-editor",
"ports": [
"8088:8080"
]
}
}
}

以上


解説

基本的にPythonは改行で命令文の区切りを、インデントでブロックを表す言語です。

しかし、命令文の区切りにはセミコロンを使うこともできます。

yamlからjsonに変換するためには、yamlパッケージとjsonパッケージが必要なので、

これらはimportする文を書き、これらをセミコロンによって一行にまとめます。

import yaml; import json;

次に、ファイルをオープンし読み出し→yamlとしてロードしdictに変換→dictからjsonにダンプするコードを書きます。

json.dumps( # dictをjson文字列に変換

yaml.load( # yaml文字列をdictに変換
open('docker-compose.yml').read() # ファイルオープンし、読み出し
),
indent=2 # json文字列をインデントつきで出力
)

最後にこれをprintに入れて、標準出力に吐いています。