JQ - 遍历字典



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

我有input.txt可以简化为:

[
{
"foo1": "bar1",
"baz1": "fizz1"
},
{
"foo2": "bar2",
"baz2": "fizz2"
}
]

我想通过循环遍历每个对象,所以我基本上希望先处理 1,然后循环处理 2,依此类推。

我以为是这样的:

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

但这给了我

loop 0
loop 1

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

loop { "foo1": "bar1", "baz1": "fizz1" }
loop { "foo2": "bar2", "baz2": "fizz2" }

我错过了什么?

无需使用bash,您可以在jq本身中执行此操作:

jq -r 'keys[] as $k | "loop: (.[$k])"' file.json

loop: {"foo1":"bar1","baz1":"fizz1"}
loop: {"foo2":"bar2","baz2":"fizz2"}

使用-c选项怎么样:

$ jq -c '.[]' file | sed 's/^/loop /'
loop {"foo1":"bar1","baz1":"fizz1"}
loop {"foo2":"bar2","baz2":"fizz2"}

假设响应是一个包含数据的变量:

echo "$response" | jq --raw-output '.[] | "loop " + tostring'
loop {"foo1":"bar1","baz1":"fizz1"}
loop {"foo2":"bar2","baz2":"fizz2"}

希望对您有所帮助!

最新更新