ダウンロードしたファイルの名前を「使い慣れた」方法で変更できるように解析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