根据该部分,我正在尝试解析我的数据并将其转换为多个 csv 文件。
{
"content": [
{
"Title": "abc",
"brand": "xyz",
"size": "5 g",
"date": "2019-01-01",
"details": {
"Temperature": [
{
"value": "90",
"chracterstics":"Normal"
},
{
"value":"100",
"chracterstics":"high"
},
{
"value":"80",
"chracterstics":"low"
}
],
"certifications": [
{
"value": "based",
"chracterstics":"pass"
},
{
"value": "50",
"chracterstics":"failed"
}
]
},
"formats": {
"city": "NYC",
"id": "007",
"manufacture":""
},
"innerDetails": [
{
"contains": "abc",
"panel":"xyz",
"values":[
{
"name":"abc",
"value":"10"
},
{
"name":"xyz",
"value":"20"
}
]
}
]
}
]
}
我正在尝试将内容数据放入一个 csv 文件中,将温度数据放入第二个 csv 文件中,将证书放入第三个文件中,将格式和内部详细信息数据放入另一个单独的文件中
我尝试了以下方法,但是出现“无法使用字符串“ brand”索引数组”错误。
jq -r '.[]|[.Title,.brand,.size,.date]|@csv' $jsonfile > sample.csv.
我尝试与其他部分在同一行上,但是遇到相同的错误。
我该如何解决这个问题?
答案 0 :(得分:0)
使用地图:
$jq -r '.[] | map(.Title), map(.brand), map(.size), map(.date) | @csv' yourfile.json > sample.csv
答案 1 :(得分:0)
为简单起见,最好在单独的jq调用中处理每组数据。 鉴于jq的每次调用都非常快,因此这似乎是合理的,而且似乎只需要少量此类调用即可。
温度和认证数据在JSON输入中是统一的,因此可以在诸如以下的循环中处理:
for field in Temperature certifications ; do
echo $field ::
jq --arg field "$field" -r '
.content[].details | .[$field][]
| [.value, .characteristics] | @csv' input.json > output.$field.csv
done
(当然,这假定JSON有效,并且“证明”的拼写正确。)
for field in Temperature certifications ; do
echo $field ::
jq --arg field "$field" -r '.content[]
| [.Title, .brand] as $columns
| .details | .[$field][]
| ($columns + [.value, .characteristics]) | @csv
' so-multiple-csv-files.json > tmp.output.$field.csv
done