jq - 迭代字典

Ale*_*lex 2 iteration bash json jq

我的 json 知识很不稳定,所以如果我使用了错误的术语,请原谅我。

我有input.txt可以简化为:

[
  {
    "foo1": "bar1",
    "baz1": "fizz1"
  },
  {
    "foo2": "bar2",
    "baz2": "fizz2"
  }
]
Run Code Online (Sandbox Code Playgroud)

我想通过循环迭代每个对象,所以我本质上希望首先处理 1,然后循环处理 2,等等。

我以为是这样的:

jq 'keys[]' input.json | while read key ; do
    echo "loop --$(jq "[$key]" input.json)"
done
Run Code Online (Sandbox Code Playgroud)

但这给了我

loop 0
loop 1
Run Code Online (Sandbox Code Playgroud)

我希望看到的地方(这里的间距是可选的,不确定 jq 将如何解析它):

loop { "foo1": "bar1", "baz1": "fizz1" }
loop { "foo2": "bar2", "baz2": "fizz2" }
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

anu*_*ava 7

无需使用bash,您可以jq自行执行此操作:

jq -r 'keys[] as $k | "loop: \(.[$k])"' file.json
Run Code Online (Sandbox Code Playgroud)

loop: {"foo1":"bar1","baz1":"fizz1"}
loop: {"foo2":"bar2","baz2":"fizz2"}
Run Code Online (Sandbox Code Playgroud)