Chinachu と JSON と bash

Chinachu で録画後に config.json の recordedCommand に設定されたスクリプトが実行される時に引数が渡される。第一引数は録画ファイル名、第二引数はJSONデータなんだけど、このJSONデータをスクリプト内で有効活用できないだろうかと悩んでいたところ、 jq と言うコマンドを見つけたのでメモ。

./jq site
jq is a lightweight and flexible command-line JSON processor.

jq は、標準入力で渡されたJSONデータを加工して標準出力で返してくれる。例えば、次のようなJSONデータを見易く整形するためには jq ‘.’ と書く。この場合「.(ピリオド)」は解析されたオブジェクトの基点となっている。

$ JSON='{"id":"gr1048-r8a","channel":{"n":2,"type":"GR","channel":"22","name":"TBS1","id":"GR_1048","sid":"1048"},"category":"etc","title":"夢の扉+","subTitle":"","fullTitle":"夢の扉+【字】","detail":"世界初!“海に浮かぶ風力発電所”で福島を新エネルギー拠点に!オールジャパンの技術力で挑む国家プロジェクトに完全密着! ナレーター/中井貴一","episode":null,"start":1384680600000,"end":1384682400000,"seconds":1800,"flags":["字"],"isConflict":false,"tuner":{"name":"PT3-T1","isScrambling":false,"types":["GR"],"command":"recpt1 --device /dev/pt3video2 --b25 --strip --sid <sid> <channel> - -","n":2},"recorded":"./recorded/夢の扉+_131117-1830_22_PT3-T1.m2ts","command":"recpt1 --device /dev/pt3video2 --b25 --sid 1048,epg 22 - -"}'
$ echo $JSON | jq '.'
{
  "command": "recpt1 --device /dev/pt3video2 --b25 --sid 1048,epg 22 - -",
  "recorded": "./recorded/夢の扉+_131117-1830_22_PT3-T1.m2ts",
  "tuner": {
    "n": 2,
    "command": "recpt1 --device /dev/pt3video2 --b25 --strip --sid <sid> <channel> - -",
    "types": [
      "GR"
    ],
    "isScrambling": false,
    "name": "PT3-T1"
  },
  "isConflict": false,
  "flags": [
    "字"
  ],
  "seconds": 1800,
  "end": 1384682400000,
  "start": 1384680600000,
  "id": "gr1048-r8a",
  "channel": {
    "sid": "1048",
    "id": "GR_1048",
    "name": "TBS1",
    "channel": "22",
    "type": "GR",
    "n": 2
  },
  "category": "etc",
  "title": "夢の扉+",
  "subTitle": "",
  "fullTitle": "夢の扉+【字】",
  "detail": "世界初!“海に浮かぶ風力発電所”で福島を新エネルギー拠点に!オールジャパンの技術力で挑む国家プロジェクトに完全密着! ナレータ ー/中井貴一",
  "episode": null
}

このJSONデータからchannelのtypeを取り出してみる。

$ echo $JSON | jq '.channel.type'
"GR"

recorded.json からchannelのsidを取り出すこともできる。

$ cat ~/chinachu/data/recorded.json | jq '.[].channel.sid'
"191"
"191"
"191"
"1048"
"1048"

jq これは結構使えるかも。

追記

jq の 翻訳をされている方のサイトを見つけました。

Chinachu と JSON と bash」への4件のコメント

  1. jpコマンドを利用して抜き出した文字列は” “で囲まれており、扱いづらいの
    ” “抜きで抜き出す場合はどうすればいいのでしょうか?

  2. angelさん、こんばんは。
    私の場合は、Chinachu で録画後にJSONデータからtitleを抜くために

    TITLE=`echo $JSON | jq '.title' | tr -d "

    として利用しています。

  3. 今更ですが、jq に -r を付けるとダブルクオートが消えます。
    jq -r ‘.channel.name, .title , .detail’
    などとすることで複数行に各種情報を一気に表示したりもできます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です