【问题标题】:Extracting data using JQ使用 JQ 提取数据
【发布时间】:2019-08-20 16:38:52
【问题描述】:

我正在尝试使用 jq 从包含特定值的 JSON 字段中提取数据。

这是我正在使用的 JSON:

{
  "thing1": {
    "a": false,
    "b": true,
    "c": false,
    "d": false
  },
  "thing2": {
    "a": true,
    "b": true,
    "c": true,
    "d": true
  },
  "thing3": {
    "a": true,
    "b": false,
    "c": false,
    "d": false
  }
}

我想保留包含"true" 值的对象,并删除值不是true 的键。

我对 JQ 没有太多经验,也没有如何正确构造 json 数据。如果这意味着重构主要的 JSON 数据,我也愿意这样做。

这是我想要达到的结果:

{
  "thing1": {
    "b": true
  },
  "thing2": {
    "a": true,
    "b": true,
    "c": true,
    "d": true
  },
  "thing3": {
    "a": true
  }
}

【问题讨论】:

    标签: json dictionary jq


    【解决方案1】:
    # First remove the subkeys that are not truthy:
    map_values(with_entries(select(.value)))
    # ... then remove the empty dictionaries:
    | with_entries(select(.value|length > 0))
    

    根据口味添加调味料。

    【讨论】:

    • 这对布尔值很有用......碰巧有没有办法用非布尔值做到这一点?说明字段是“成功”还是“失败”而不是真/假
    • @Chris - 当然。 jq 是一种编程语言。您只需修改 select(.value) 表达式以指定您想要的条件,例如select(.value != "Failure")
    【解决方案2】:

    另一个 jq 脚本:

    <file jq 'del(..|select(. == false))'
    

    这递归地转到所有节点(运算符..)并删除所有值为false的元素。

    如果需要,您可以将select 中的条件更改为false 以外的其他内容,例如"Failure"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-08
      相关资源
      最近更新 更多