Bashで.jsonを解析する

Bashで.jsonを解析する

ダウンロードしたファイルの名前を「使い慣れた」方法で変更できるように解析jsonしたいファイルがあります。私が使用するもののいくつかはpodfox次のとおりです。json

{
    "episodes": [
        {
             "title": "Hired and Fired by Little Richard and Jimi\u2019s first trip on LSD",
             "url": "https://www.podtrac.com/pts/redirect.mp3/chtbl.com/track/5899E/traffic.megaphone.fm/HSW2392375869.mp3",
             "downloaded": true,
             "listened": false,
             "published": 1582203660.0
        },
        {
             "title": "Stolen Cars, Broken Taboos, and the Search for Billy Davis",
             "url": "https://www.podtrac.com/pts/redirect.mp3/chtbl.com/track/5899E/traffic.megaphone.fm/HSW5134475908.mp3",
             "downloaded": true,
             "listened": false,
             "published": 1581598860.0
        },
    ]
    "shortname": "27 Club",
    "title": "27 Club",
    "url": "https://feeds.megaphone.fm/HSW5142951139"
}

urlそれを取得してtitleの変数に渡そうとしますbash。 (ほとんどの場合)使用できますが、より良い方法がgrepあることを知っていますが、機能する構文はjqわかりません。jq

これはコマンドラインのgrepで動作しますgrep -B 1 HSW2392375869.mp3 < feed.json | grep "title" | cut -d"\"" -f4が、潜在的にエラーが発生しやすい解決策のようです。

試みるとき:jq -c '.["episodes"].url'シェルは無期限に停止します。jqここではその項目は必要ないので、url(最終)値の合計を検索して返すpublished方法でtitle十分です。

ベストアンサー1

.episodes実際には、まずフィルタリングしてから内部配列をフィルタリングする必要があります。

 jq ".episodes | .[0]" jsonfile
{
  "title": "Hired and Fired by Little Richard and Jimi’s first trip on LSD",
  "url": "https://www.podtrac.com/pts/redirect.mp3/chtbl.com/track/5899E/traffic.megaphone.fm/HSW2392375869.mp3",
  "downloaded": true,
  "listened": false,
  "published": 1582203660
}

タイトル:

jq ".episodes| .[0].title" jsonfile
"Hired and Fired by Little Richard and Jimi’s first trip on LSD"

出版社:

jq ".episodes| .[0].published" jsonfile
1582203660

url値ベースのクエリの場合

jq '.episodes | .[] | select(.url=="https://www.podtrac.com/pts/redirect.mp3/chtbl.com/track/5899E/traffic.megaphone.fm/HSW2392375869.mp3").title' jsonfile    
"Hired and Fired by Little Richard and Jimi’s first trip on LSD"    

jq '.episodes | .[] | select(.url=="https://www.podtrac.com/pts/redirect.mp3/chtbl.com/track/5899E/traffic.megaphone.fm/HSW2392375869.mp3").published' jsonfile
1582203660

おすすめ記事