[英]Not able to get the desired output using jq
我有一个 json 文件,如下所示: shopping-items.json
{
"grocery" : [
{
"type": "fruits",
"items" : [
{ "name": "mango", "quantity": "1kg" },
{ "name": "kiwi", "quantity": "2pc" },
{ "name": "apple", "quantity": "2kg" },
{ "name": "banana", "quantity": "6pc" }
]
},
{
"type": "vegetables",
"items" : [
{ "name": "potato", "quantity": "3kg" },
{ "name": "onion", "quantity": "2kg" },
{ "name": "tomato", "quantity": "2kg" }
]
},
{
"type": "dryfruits",
"items" : [
{ "name": "almonds", "quantity": "2kg" },
{ "name": "cachewnut", "quantity": "1kg" },
{ "name": "walnut", "quantity": "1.5kg" }
]
},
{
"type": "pulses",
"items" : [
{ "name": "Blackgram", "quantity": "1kg" },
{ "name": "chickpeas", "quantity": "2kg" },
{ "name": "lentils", "quantity": "1.5kg" }
]
}
]
}
我在这个集合上尝试了几个 jq 查询:-
$ cat shopping-items.json | jq -r '.grocery[] | .items[] | [.name, .quantity] | join (",")'
mango,1kg
kiwi,2pc
apple,2kg
banana,6pc
potato,3kg
onion,2kg
tomato,2kg
almonds,2kg
cachewnut,1kg
walnut,1.5kg
Blackgram,1kg
chickpeas,2kg
lentils,1.5kg
$ cat shopping-items.json | jq -r '.grocery[] | [.type, .items[].name, .items[].quantity] | join (",")'
fruits,mango,kiwi,apple,banana,1kg,2pc,2kg,6pc
vegetables,potato,onion,tomato,3kg,2kg,2kg
dryfruits,almonds,cachewnut,walnut,2kg,1kg,1.5kg
pulses,Blackgram,chickpeas,lentils,1kg,2kg,1.5kg
但期望的结果如下:-
fruits,mango,1kg
fruits,kiwi,2pc
fruits,apple,2kg
fruits,banana,6pc
vegetables,potato,3kg
vegetables,onion,2kg
vegetables,tomato,2kg
dryfruits,almonds,2kg
dryfruits,cachewnut,1kg
dryfruits,walnut,1.5kg
pulses,Blackgram,1kg
pulses,chickpeas,2kg
pulses,lentils,1.5kg
有办法,但我觉得效率不高。 为这个结果寻找一种有效的方法。
filename=shopping-items.json
count=`cat ${filename} | jq -c '.grocery[] | keys' | wc -l`
counter=0
while [ $counter -lt $count ]
do
var_type=`cat ${filename} | jq -r .grocery[$counter].type`
jq --arg var_type $var_type --argjson c $counter --raw-output '.grocery[$c].items[] | [$var_type, .name, .quantity] | join(",")' ${filename}
counter=`expr $counter + 1`
done
为了达到预期的效果,您可以使用以下 jq 程序简单地调用 jq 一次:
.grocery[]
| [.type] + ( .items[] | [.name, .quantity])
| join (",")
在jqplay.org上查看它的实际应用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.