【问题标题】:Iterate over items within an object迭代对象内的项目
【发布时间】:2015-12-22 23:08:52
【问题描述】:

我正在尝试解析我们的一个 es 集群的 json 输出以收集过滤器缓存统计信息,并希望使用 Jq 来做到这一点。这是curl 命令的输出:

{
  "_shards": {
    "total": 5662,
    "successful": 5662,
    "failed": 0
  },
  "_all": {
    "primaries": {
      "filter_cache": {
        "memory_size": "32.8gb",
        "memory_size_in_bytes": 35245081088,
        "evictions": 31347095
      }
    },
    "total": {
      "filter_cache": {
        "memory_size": "94.3gb",
        "memory_size_in_bytes": 101307321504,
        "evictions": 79329152
      }
    }
  },
  "indices": {
    "oreserverdk04180047": {
      "primaries": {
        "filter_cache": {
          "memory_size": "0b",
          "memory_size_in_bytes": 0,
          "evictions": 11
        }
      },
      "total": {
        "filter_cache": {
          "memory_size": "0b",
          "memory_size_in_bytes": 0,
          "evictions": 132
        }
      }
    },
    "janbe10200002": {
      "primaries": {
        "filter_cache": {
          "memory_size": "0b",
          "memory_size_in_bytes": 0,
          "evictions": 88
        }
      },
      "total": {
        "filter_cache": {
          "memory_size": "0b",
          "memory_size_in_bytes": 0,
          "evictions": 119
        }
      }
    }
  }
}

基本上我想让输出看起来像这样:

oreserverdk04180047 0b
janbe10200002 0b

我只想要“total”中的索引名称和 memory_size 列。如果我通过硬编码索引名称来运行它,我可以得到它:

jq '. | {memory_size: .indices.janbe10200002.total.filter_cache.memory_size}'

但我希望迭代使用某种通配符作为索引名称。

【问题讨论】:

    标签: json jq


    【解决方案1】:
    jq -r  '
      .indices
      | to_entries[]
      | "\(.key) \(.value.total.filter_cache.memory_size)"
    ' input.json
    

    输出:

    oreserverdk04180047 0b
    janbe10200002 0b
    

    【讨论】:

      【解决方案2】:

      这是一个使用 foreach

      的解决方案
        .indices
      | foreach keys[] as $k (
            .
          ; .
          ; "\($k) \(.[$k].total.filter_cache.memory_size)"
        )
      

      编辑:我现在意识到 foreach E as $X (.; .; R) 形式的过滤器几乎总是可以重写为 E as $X | R 所以上面真的只是

        .indices
      | keys[] as $k
      | "\($k) \(.[$k].total.filter_cache.memory_size)"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-23
        • 1970-01-01
        • 2017-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-19
        相关资源
        最近更新 更多