如何遍历每个JSON块并打印信息[重复]

dzhpxtsq  于 2023-10-21  发布在  其他
关注(0)|答案(1)|浏览(104)

这个问题已经有答案了

How to get the json elements(key , value) in an object to be separated distinctly(1个答案)
12天前关闭
我有一个bash命令,它以下面的形式给我输出,这些是1块JSON对象,我在json > jq >输出后从文件中得到这些。

{
    "key": "hello",
    "value": "world"
}
{
    "key": "foo",
    "value": "bar"
}
{
    "key": "Disney",
    "value": "World"
}
{
    "key": "South",
    "value" "Africa"
}

现在我的问题是我的bash脚本如何分别生成每个JSON块。就像我想打印整个输出中的每个JSON块一样,我想遍历每个{}块并对它做一些事情。
请注意,在这种情况下,命令替换没有帮助,因此将输出存储在文件中可以工作,但将其馈送到命令替换失败,因为这些花括号也作为单行而不是块注入?在bash中有没有一种方法可以将其作为块{}读取和传递?
感谢帮助!

hi3rlvi2

hi3rlvi21#

使用与here相同的技术:jq 1.7提供了--raw-output0标志,您可以将其与read -d ''合并结合使用:

while read -r -d '' json
do printf "Using %s to do something.\n\n" "$json"
done < <(jq --raw-output0 . file.json)
Using {
  "key": "hello",
  "value": "world"
} to do something.

Using {
  "key": "foo",
  "value": "bar"
} to do something.

Using {
  "key": "Disney",
  "value": "World"
} to do something.

Using {
  "key": "South",
  "value": "Africa"
} to do something.

对于旧版本的jq(1.5+),您可以使用-j标志,并通过将过滤器更改为., "\u0000"来手动生成NUL字符。

相关问题