jqを使用してシェルスクリプトプログラムでjsonファイルを解析しようとしています。私はiOSデベロッパだので、私は私が望むものを達成するであろうスウィフトコードのモック作品を書かれているJSONオブジェクトをシェルスクリプトのjqで繰り返します。
{
"items":[
{
"playlists":[
{
"title":"Level One Title",
"courses":[
{
"title":"Level One Course One Title",
"lessons":[
{
"title":"lesson 1 title",
"url":"lesson 1 url"
},
{
"title":"lesson 2 title",
"url":"lesson 2 url"
}
]
},
{
"title":"Level One Course Two Title",
"lessons":[
{
"title":"lesson 1 title",
"url":"lesson 1 url"
},
{
"title":"lesson 2 title",
"url":"lesson 2 url"
}
]
}
]
},
{
"title":"Level Two Title",
"courses":[
{
"title":"Level Two Course One Title",
"lessons":[
{
"title":"lesson 1 title",
"url":"lesson 1 url"
},
{
"title":"lesson 2 title",
"url":"lesson 2 url"
}
]
},
{
"title":"Level Two Course Two Title",
"lessons":[
{
"title":"lesson 1 title",
"url":"lesson 1 url"
},
{
"title":"lesson 2 title",
"url":"lesson 2 url"
}
]
}
]
}
]
}
]
}
:
JSONの構造は次のようになります。それは次のようになります。
for level in levels {
let title = level["title"]
//TODO: create a folder with title and set as pwd
for course in level["courses"] {
let courseTitle = course["title"]
//TODO: create a folder with title and set as pwd
for lesson in course["lessons"] {
let title = lesson["title"]
let videoURL = lesson["url"]
//TODO: download video in current folder with title
}
}
}
levels
はlevel
がそれらDictionaries
の一つであり、Dictionaries
のArray
です。各レベルは、Array
のcourses
を含み、それぞれDictionary
であり、Array
のlesson
辞書を含む。
Swiftから来て、jqの構文が非常に混乱していることがわかりました。特に、関数の戻り値を変数に代入しました。ここまでです。
levels=$(jq ".items[0].playlists" data.json)
for level in $levels
do
title=$($level | jq ".title")
echo $title
done
これはまったく動作していないようです。私はfor-loopsを使用する私のロジックが完全に間違っていると思います。どのようにこれが行われる任意のアイデアですか?
サンプル入力とサンプル出力を提供すると役に立つので、コードを読む必要はありません。また、コードから作成するのが難しい文脈があります(トップレベル 'レベル'リストや辞書など?) –
一般に、 'jq'を呼び出すプログラムはすべての反復を行います。つまり、ループはシェルスクリプトではなくjqコード内になければなりません。 –
(と 'レベルの$ levels'はシェルとしてバグです - http://mywiki.wooledge.org/DontReadLinesWithForを参照してください) –