我有以下JSON数据:
{
"Jobs":[
{"JobId": 111, "ArchiveId": 333},
{"JobId": 112, "ArchiveId": 333},
{"JobId": 113, "ArchiveId": 2323},
{"JobId": 114, "ArchiveId": 444}
]
}
这是查看JSON对象的shell脚本:
count_again=0
jq -r '.Jobs |= unique_by(.ArchiveId)' my-json-archiving.json \
| while IFS= read -r job; do
count_again=$(($count_again + 1))
echo $job
echo $count_again
done
我的第一步是通过某个键(.ArchiveId)过滤所有重复项。完成后,我要遍历结果。下面是我所拥有的,主要的问题是它实际上是逐行读取的。我认为这与我返回的$job
有关。
我对shell脚本非常陌生,因此我不确定如何在读取对象时返回其循环通过的对象
我不确定您在这里问什么100%。如果您只想从每个作业中获取JobId
和ArchiveId
,则可以执行以下操作:
$ jq -r '.Jobs |= unique_by(.ArchiveId) | .Jobs[] | "\(.JobId) \(.ArchiveId)"' \
my-json-archiving.json
111 333
114 444
113 2323
这样的文本在awk中效果很好。例如:
$ jq -r '.Jobs |= unique_by(.ArchiveId) | .Jobs[] | "\(.JobId) \(.ArchiveId)"' \
my-json-archiving.json | awk '{print "JobId:", $1, "ArchiveId:", $2}'
JobId: 111 ArchiveId: 333
JobId: 114 ArchiveId: 444
JobId: 113 ArchiveId: 2323
类似的问题:Using jq to extract specific property values and output on a single line。
也可以看一下jq的联机帮助页(man jq
)。那里有很多例子。