LoginSignup
2
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-01-18

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

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

例えば、カレントディレクトリの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に入れて、標準出力に吐いています。

2
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1