jsonの変数に格納されているキー値をgrep /印刷する方法は?

jsonの変数に格納されているキー値をgrep /印刷する方法は?

入れ子になったjsonを含む変数があります。

a={"content":[{"JOB_STATUS_ID":283739,"PROGRAM_ID":57,"STATUS":"Completed","**DATA_DATE**":"2017-03-09 00:00:00","**START_TIME**":"2017-03-10 00:46:13","END_TIME":"2017-03-10 00:56:40","TOTAL_ROWS":null,"UPDATED_ROWS":null,"DELETED_ROWS":null,"INSERTED_ROWS":null,"REF1":"NULL","REF2":"NULL","AUD_CREATE_DT":"2017-03-10 00:46:13","AUD_CREATE_USER":"JOB_CONTROL","AUD_MODIFY_DT":"2017-03-10 00:56:40","AUD_MODIFY_USER":"JOB_CONTROL"},

{"JOB_STATUS_ID":109711,"PROGRAM_ID":57,"STATUS":"Completed","DATA_DATE":"2017-01-11 00:00:00","START_TIME":"2017-01-12 16:55:14","END_TIME":"2017-01-12 18:54:51","TOTAL_ROWS":null,"UPDATED_ROWS":null,"DELETED_ROWS":null,"INSERTED_ROWS":null,"REF1":"NULL","REF2":"NULL","AUD_CREATE_DT":"2017-01-12 16:55:14","AUD_CREATE_USER":"JOB_CONTROL","AUD_MODIFY_DT":"2017-01-12}

変数aでネストされたjson(強調表示されているように)の最初のjsonのDATA_DATEとSTART_TIMEをgrepする方法を探しています。

助けが必要ですか?

awk、sed、またはシェルスクリプトを使用できます。

ベストアンサー1

使用ジャック:

$ echo $a | jq '.[][0]["**DATA_DATE**"]'
"2017-03-09 00:00:00"

jqはすべてのディストリビューションで利用できない可能性があり、直接コンパイルしたくない場合があるため、基本ライブラリでJSONをサポートする他の多くのスクリプト言語を利用できます。

真珠:

$ perl -e "use JSON::Parse 'parse_json'; my \$a = parse_json ('$(echo $a)'); print \$a->{'content'}[0]{'**DATA_DATE**'}"
2017-03-09 00:00:00

Python:

$ python -c "import json; a=json.loads('$(echo $a)'); print(a['content'][0]['**DATA_DATE**'])"
2017-03-09 00:00:00

ルビー:

$ ruby -e "require 'json'; puts JSON.parse('$a')['content'][0]['**DATA_DATE**'];"
2017-03-09 00:00:00

もちろん、標準の*nix(GNU)ツールを使用してこの特定のJSONの例から値を取得できますが、これは本当に不便です。 JSON構造が変更されると、コードが予期せず動作する可能性があります。

おすすめ記事