{
"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"
}
]
}
]
}
]
}
다음을 시도했지만 오류가 발생합니다.
문자열 'Title'을 사용하여 배열을 인덱싱할 수 없습니다.
jq -r '.content[]|[.Title,.brand,.characteristics,.value]' $jsonfile.
다른 부분과 같은 줄에서 시도했지만 동일한 오류가 발생했습니다.
이 문제를 어떻게 해결할 수 있나요?
예상 출력:
abc,xyz,90,Normal.
abc,xyz,100,high.
abc,xyz,80,low
답변1
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
객체 자체가 아닌 객체를 포함하는 배열이 생성됩니다. 그리고 문자열로는 배열을 인덱싱할 수 없습니다.
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
위해 대신 in을 사용할 수도 있습니다 .@csv