我有以下JSON数据:
我希望能够在shell脚本中使用循环打印每个字典。
我的代码中每个循环里都有一个打印字典的语句,总共有2个字典需要打印。
但是打印结果看起来像是一个字符串。
以下是我的shell脚本:
{
"id": {
"bioguide": "E000295",
"thomas": "02283",
"govtrack": 412667,
"opensecrets": "N00035483",
"lis": "S376"
},
"bio": {
"gender": "F",
"birthday": "1970-07-01"
},
"tooldatareports": [
{
"name": "A",
"tooldata": [
{
"toolid": 12345,
"data": [
{
"time": "2021-01-01",
"value": 1
},
{
"time": "2021-01-02",
"value": 10
},
{
"time": "2021-01-03",
"value": 5
}
]
},
{
"toolid": 12346,
"data": [
{
"time": "2021-01-01",
"value": 10
},
{
"time": "2021-01-02",
"value": 100
},
{
"time": "2021-01-03",
"value": 50
}
]
}
]
}
]
}
现在我可以使用以下命令行获取一个包含两个字典的列表, 每个字典都有一个键"数据",值是一个列表。
cat data.json |jq -n --stream '[fromstream(inputs | (.[0] | index("data")) as $ix | select($ix) | .[0] |= .[$ix:])]'
我希望能够在shell脚本中使用循环打印每个字典。
我的代码中每个循环里都有一个打印字典的语句,总共有2个字典需要打印。
但是打印结果看起来像是一个字符串。
以下是我的shell脚本:
array=$(cat ernst.json | jq -n --stream '[fromstream(inputs | (.[0] | index("data")) as $ix | select($ix) | .[0] |= .[$ix:])]')
for d in $array
do
echo $d
done
有人有什么想法吗?
jq
。能否只用一次调用完成? - Philippejq
调用中添加-c
和[]
。虽然我并不总是喜欢最紧凑的解决方案,但我通常更喜欢清晰地分离关注点。这就是管道非常适合的地方。在这种情况下,我认为展示每个步骤的作用更为重要。 - cornuz