代码之家  ›  专栏  ›  技术社区  ›  David Vasandani

jq-如何打印键(不是键的值)并在键上迭代以打印子值

jq
  •  9
  • David Vasandani  · 技术社区  · 8 年前

    我可以打印钥匙:

    $ jq -r '.indices | keys[]'
    plan
    resource
    user
    

    我可以打印子值:

    $ jq '.indices[] | .primaries.docs.count'
    14208
    1427143
    104475
    

    如何打印键和子值?

    plan: 14208
    resource: 1427143
    user: 104475
    
    2 回复  |  直到 5 年前
        1
  •  9
  •   Andreas Louv    8 年前

    以下方法可能有效:

    $ jq -r '.indices | to_entries[] | "\(.key): \(.value.primaries.docs.count)"' input.json
    plan: 14208
    resource: 1427143
    user: 104475
    

    以上假设输入为:

    {
      "indices": {
        "plan":     { "primaries": { "docs": { "count": 123 }}},
        "resource": { "primaries": { "docs": { "count": 456 }}},
        "user":     { "primaries": { "docs": { "count": 789 }}}
      }
    }
    

    to_entries 将转换对象 indices 到数组:

    [
      { "key": "plan", "value": { ... } },
      ...,
      ...
    ]
    

    然后可以容易地映射。

        2
  •  7
  •   jq170727    7 年前

    这里有一个直接使用密钥的解决方案:

      .indices
    | keys[] as $k
    | "\($k): \(.[$k].primaries.docs.count)"