【问题标题】:Recursive search values by key通过键递归搜索值
【发布时间】:2016-11-22 09:38:16
【问题描述】:

我有一个这样的 JSON:

{ 
  "A": { "error": null },
  "B": { "C": {"error": "error string"}},
  "C": { "D": {"error": null}},
  "D": { "error": "err str"}
}

end 我想找出所有 error 键的值不是 null

对于我的示例,它应该返回

"error string"
"err str"

我该怎么做? jq 可以吗?

【问题讨论】:

  • 你的代码尝试在哪里?
  • 我试过jq 'select(.error!=null)' file.json之类的东西,但它没有递归搜索。
  • 你试过搜索吗,jq search recursively
  • jq可以吗?如何在 bash 中递归搜索?
  • @123 当然。这是最热门的。

标签: json bash jq


【解决方案1】:

使用..递归迭代,得到所有.error的值。如果他们是null,请删除他们:

jq '.. | .error? // empty'

或者,您可以选择带有strings 的字符串元素,而不是使用empty

jq '.. | .error? | strings'

【讨论】:

    【解决方案2】:

    这是一个使用 tostreamselect

    的解决方案
      tostream
    | select(length==2 and .[0][-1]=="error" and .[1]!=null) as [$p,$v]
    | $v
    

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 2013-04-15
      • 1970-01-01
      • 2018-01-10
      • 2016-01-19
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      相关资源
      最近更新 更多