tkuchikiの日記

新ブログ https://blog.tkuchiki.net

python のワンライナーで、json の任意のキーの値を出力する

jq を使わないで行う方法です。

$ echo '{"hosts":[{"name":"host1"},{"name":"host2"}]}' | python -c "exec(\"import json,sys\\nj=json.load(sys.stdin)\\nfor attr in j.get('hosts'):\\n    print attr.get('name')\")"
host1
host2

python のコードに改行を入れると以下のとおりになります。

import json, sys

j=json.load(sys.stdin)

for attr in j.get('hosts'):
    print attr.get('name')
  1. sys.stdin で標準入力を受け取って、
  2. json.load で json 文字列を読み込み、
  3. json.get で要素にアクセスして、
  4. ループで回す

といった具合です。

shellscript で使えると思いますが、
python を使うなら全部 python で書いても良い気がします。
ただ、python から何度も shell のコマンドを呼び出す場合、
この方法の方が外部コマンドの呼び出し回数が少なくてパフォーマンスが良いかもしれません。
python だとモジュールを追加しなくても json モジュールが使えるので便利ですね。