Json del中的管道(…| select(…|…))在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 |德尔( .点击次数[

我正在尝试删除数组中基于标记的一些对象。我可以让它在jqplay.org(v1.6)上运行良好,但是有没有办法在v1.5中获得相同的结果?我刚刚得到一个错误
无效的路径表达式,结果是

目标是返回去掉前两个(
内容
数据
)级别的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