Json del中的管道(…| select(…|…))在v1.6中工作,如何在v1.5中获得相同的结果?
我正在尝试删除数组中基于标记的一些对象。我可以让它在jqplay.org(v1.6)上运行良好,但是有没有办法在v1.5中获得相同的结果?我刚刚得到一个错误Json del中的管道(…| select(…|…))在v1.6中工作,如何在v1.5中获得相同的结果?,json,select,nested,jq,Json,Select,Nested,Jq,我正在尝试删除数组中基于标记的一些对象。我可以让它在jqplay.org(v1.6)上运行良好,但是有没有办法在v1.5中获得相同的结果?我刚刚得到一个错误无效的路径表达式,结果是 目标是返回去掉前两个(内容和数据)级别的JSON,如果该注释没有以“x”或“y”开头的类型标记,则去掉注释的属性 下面是v1.6的工作示例: 还有一个问题:但我不知道如何(或者是否可能)应用del()的变通方法,而不是path(),假设这是相同的基本问题 JQ说明: .content.data |德尔( .点击次数[
无效的路径表达式,结果是
目标是返回去掉前两个(内容
和数据
)级别的JSON,如果该注释没有以“x”或“y”开头的类型
标记,则去掉注释
的属性
下面是v1.6的工作示例:
还有一个问题:但我不知道如何(或者是否可能)应用del()
的变通方法,而不是path()
,假设这是相同的基本问题
JQ说明:
.content.data
|德尔(
.点击次数[]。文件注释[]
|挑选
(.类型
|任何(以“x”开头或以“y”开头)
|不是
)
)
输入JSON:
{
“内容”:{“数据”:{
“元”:“东西”,
“点击次数”:[
{“文件”:
{
“id”:“10”,
“说明”:{
“f1”:{“名称”:“f1”,“类型”:[“wwwa”,“zzzb”]},
“f2”:{“名称”:“f2”,“类型”:[“xxxa”,“yyya”]}
}
},
“分数”:“1”
},
{“文件”:
{
“id”:“11”,
“说明”:{
“f1”:{“名称”:“f1”,“类型”:[“wwwa”,“zzzb”]},
“f3”:{“名称”:“f3”,“类型”:[“qzxb”,“xxxb”]}
}
},
“分数”:“2”
} ] } } }
预期结果:
{
“元”:“东西”,
“点击次数”:[
{
“文件”:{
“id”:“10”,
“说明”:{
“f2”:{“名称”:“f2”,“类型”:[“xxxa”,“yyya”]}
}
},
“分数”:“1”
},
{
“文件”:{
“id”:“11”,
“说明”:{
“f3”:{“名称”:“f3”,“类型”:[“qzxb”,“xxxb”]}
}
},
“分数”:“2”
} ] }
非常感谢您的建议。我基本上是一个jq新手。即使在v1.5中它实际上无法实现,至少我不会浪费更多的时间来实现它 几小时后返回-我发现了一些似乎有效的方法,仍然对任何评论/其他解决问题的方法/改进非常感兴趣
.content.data
| .hits[].doc.notes |= map (
if ( .types | any(startswith("x") or startswith("y")))
then .
else empty
end
)
几小时后返回-我发现一些似乎有效的东西,仍然对任何评论/其他解决问题的方法/改进非常感兴趣
.content.data
| .hits[].doc.notes |= map (
if ( .types | any(startswith("x") or startswith("y")))
then .
else empty
end
)
这只是OP提出的解决方案的一个变体。它说明了如何通过构造一个合适的辅助函数,以更直观、更稳健的方式表达
del
的复杂用法
本例中的相关辅助功能实现剥离要求:
# Input: an object some keys of which are to be removed
def prune:
to_entries
| map( select( any(.value.types[]; test("^(x|y)")) ) )
| from_entries ;
现在可以使用一个衬里完成该任务:
.content.data | .hits |= map( .doc.notes |= prune )
调用
使用program.jq中的上述jq程序,可以适当调用jq
看起来是这样的:
jq -f program.jq input.json
这只是OP提出的解决方案的一个变体。它说明了如何通过构造一个合适的辅助函数,以更直观、更稳健的方式表达
del
的复杂用法
本例中的相关辅助功能实现剥离要求:
# Input: an object some keys of which are to be removed
def prune:
to_entries
| map( select( any(.value.types[]; test("^(x|y)")) ) )
| from_entries ;
现在可以使用一个衬里完成该任务:
.content.data | .hits |= map( .doc.notes |= prune )
调用
使用program.jq中的上述jq程序,可以适当调用jq
看起来是这样的:
jq -f program.jq input.json