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

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

这个问题已经有答案了

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

  1. {
  2. "key": "hello",
  3. "value": "world"
  4. }
  5. {
  6. "key": "foo",
  7. "value": "bar"
  8. }
  9. {
  10. "key": "Disney",
  11. "value": "World"
  12. }
  13. {
  14. "key": "South",
  15. "value" "Africa"
  16. }

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

hi3rlvi2

hi3rlvi21#

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

  1. while read -r -d '' json
  2. do printf "Using %s to do something.\n\n" "$json"
  3. done < <(jq --raw-output0 . file.json)
  1. Using {
  2. "key": "hello",
  3. "value": "world"
  4. } to do something.
  5. Using {
  6. "key": "foo",
  7. "value": "bar"
  8. } to do something.
  9. Using {
  10. "key": "Disney",
  11. "value": "World"
  12. } to do something.
  13. Using {
  14. "key": "South",
  15. "value": "Africa"
  16. } to do something.

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

展开查看全部

相关问题