gpt4 book ai didi

json - 根据属性值选择数组中的项目

转载 作者:行者123 更新时间:2023-12-04 09:51:17 24 4
gpt4 key购买 nike

作为开发人员,当我使用以下 JQ 命令时:

.first_level."second_level"[] |= select(.fruit == "pear")



我将它应用于这个 JSON:
{
"first_level": {
"second_level": [
{
"fruit": "apple"
},
{
"fruit": "pear"
},
{
"fruit": "banana"
},
{
"fruit": "donuts"
}
]
}

}

然后我想要这个输出(只保留属性 fruit 等于 pear 的项目):
{
"first_level": {
"second_level": [
{
"fruit": "pear"
}
]
}

}

但是返回的当前值是(在JQ Play here也可以看到):
{
"first_level": {
"second_level": [
{
"fruit": "pear"
},
{
"fruit": "donuts"
}
]
}
}

--> 保留值 donuts我不明白的是,从 JQ 文档中, |=应该分配选择的值,但在运行时:

.first_level."second_level"[] | select(.fruit == "pear")



我有以下结果:
{
"fruit": "pear"
}

--> 它似乎选择成功,但做作并不像我预期的那样(它添加了 donuts )。

对此问题的任何帮助将不胜感激。提前致谢! :)

最佳答案

鉴于您的示例输入,该程序所做的基本上是这样的:

.first_level.second_level |= (
delpaths([[0]]) # apple != pear
| delpaths([[1]]) # banana != pear
| delpaths([[2]]) # null != pear
| delpaths([[3]]) # null != pear
)

查看 |= 的底层内置函数如何已实现 here ;当 |=的右手边应用于路径的值,如果结果是 empty ,该路径通过 delpaths 被删除.所以问题就清楚了,当 .[0] (apple) 被删除, .[1] (梨)变成 .[0] ;但是 _modify不考虑该更改,因为它会在开始时修改一次路径列表并且不会再次更新,并继续 .[1] (香蕉)。

您可以改用它:
del(.first_level.second_level[] | select(.fruit != "pear"))

或者,如果您坚持涉及 |= 的解决方案:
.first_level.second_level |= map(select(.fruit == "pear"))

关于json - 根据属性值选择数组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62007725/

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