{
"content": [
{
"Title": "abc",
"brand": "xyz",
"size": "5 g",
"date": "2019-01-01",
"details": {
"Temperature": [
{
"value": "90",
"characteristics":"Normal"
},
{
"value":"100",
"characteristics":"high"
},
{
"value":"80",
"characteristics":"low"
}
],
"certifications": [
{
"value": "based",
"characteristics":"pass"
},
{
"value": "50",
"characteristics":"failed"
}
]
},
"formats": {
"city": "NYC",
"id": "007",
"manufacture":""
},
"innerDetails": [
{
"contains": "abc",
"panel":"xyz",
"values":[
{
"name":"abc",
"value":"10"
},
{
"name":"xyz",
"value":"20"
}
]
}
]
}
]
}
以下のアプローチを試しましたが、エラーが発生します
文字列「タイトル」の配列にインデックスを付けることはできません
jq -r '.content[]|[.Title,.brand,.characteristics,.value]' $jsonfile.
他のセクションと同じ行で試しましたが、同じエラーが発生しました。
この問題を解決するにはどうすればよいですか?
予想される出力:
abc,xyz,90,Normal.
abc,xyz,100,high.
abc,xyz,80,low
あなたはそのコマンドで_Cannot index array with string "Title"
_を取得していません、あなたは取得しています
_[
"abc",
"xyz",
null,
null
]
_
characteristics
配列のオブジェクトにはvalue
またはcontents
キーがないためです(これらは_.details.Temperature
_サブ配列のキーです)。
ががあなたにそのメッセージを与えたであろうコマンドは:
_jq -r '.[] | [.Title,.brand,.characteristics,.value]' "$jsonfile"
_
または
_jq -r '.content | [.Title,.brand,.characteristics,.value]' "$jsonfile"
_
content
キールックアップがない場合、またはcontent
配列の要素を取得できない場合は、オブジェクト自体ではなく、1つのオブジェクトの配列が生成されます。また、文字列で配列にインデックスを付けることはできません。
CSV出力が必要な場合:
_$ jq -r '.content[] | .details.Temperature[] as $t | [.Title,.brand,$t.value,$t.characteristics] | @csv' file.json
"abc","xyz","90","Normal"
"abc","xyz","100","high"
"abc","xyz","80","low"
_
<object(s)> as <variable>
はjq
のループのように機能するので、ここで何が起きるかは、_$t
_が_.details.Temperature[]
_の各要素に順番に割り当てられ、各要素に対して、新しい配列が作成されます。配列は、CSV形式の行を出力する_@csv
_を介して渡されます。
jq
は、CSV出力のフィールドを常に二重引用符で囲みます。 不要な引用符を取り除くには:
_jq -r '...as above...' file.json | csvformat
_
(csvformat
は csvkit
の一部です)
または、代わりに_@tsv
_の代わりに_@csv
_を使用して、タブ区切りの出力を取得することもできます。