gpt4 book ai didi

json - 用 jq 遍历 json

转载 作者:行者123 更新时间:2023-11-29 08:53:11 29 4
gpt4 key购买 nike

我正在解析一个 API,它向我发送如下 JSON 响应:

{
"newList": {
"243": {
"id": "243",
"name": "test",
"create": {
"date": "2017-08-31 13:57:29"
}
},
"244": {
"id": "244",
"name": "test",
"create": {
"date": "2017-08-31 13:57:29"
}
}
}
}

我正在尝试使用带有 jq 的 bash 从中获取名称和创建日期,所以几乎没有成功。

jq '.newList' 确实有效并使我下降了一个级别,但这还不够。

jq '.newList .243' 给我一个编译错误。此外,243 是动态的,可以随时更改。我在这里做错了什么?

最佳答案

假设你的根节点名称是 newList 正如你在给定的问题中所拥有的那样,要获取 id 和创建日期,你可以使用 jq 进行字符串插值

api-producing-json | jq --raw-output '.newList[] | "\(.id) \(.create.date)"'

这样过滤器独立于节点中的动态数字(243244)。如果您需要带引号的输出,请删除 --raw-output 标志。

要在循环中进一步处理,您可以在 bash 循环中迭代它,

while read -r id name date; do
echo "Do whatever with ${id} ${name} ${date}"
done< <(api-producing-json | jq --raw-output '.newList[] | "\(.id) \(.name) \(.create.date)"')

或者如果您担心任何字段中的空格,甚至更仔细地分隔单词,请在过滤器中使用分隔符作为 | 作为 "\(.id)|\(.name)|\(.create.date)" 并通过设置 IFS=| 在 while 循环中使用 read 命令,因此变量是妥善保存。


始终使用官方jq - documentation寻求帮助并使用这个不错的 Playground 来测试过滤器,jq - online

关于json - 用 jq 遍历 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48005870/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com