首页 > 解决方案 > 使用格式化返回 JQ 中的多个块

问题描述

我有以下 json 作为输入:

[
    {
        "ENVIRONMENT": [
            "sit"
        ], 
        "Usage": [], 
        "id": "i-098a99bd2bd0ac86b", 
        "Name": [
            "instance1"
        ]
    }, 
    {
        "ENVIRONMENT": [
            "uat"
        ], 
        "Usage": [
            "testing"
        ], 
        "id": "i-0b210876db6d028f3", 
        "Name": [
            "instance2"
        ]
    }
]

我可以使用jq '.[] | [.id, .ENVIRONMENT[], .Usage[], .Name[]]'以获得以下信息:

[
  "i-098a99bd2bd0ac86b",
  "sit",
  "instance1"
]
[
  "i-0b210876db6d028f3",
  "uat",
  "testing",
  "instance2"
]

或者我可以jq '.[] | {id: .id, env: .ENVIRONMENT[], usage: .Usage[], name: .Name[]}'用来获取以下内容(它只返回一个实例):

{
  "id": "i-0b210876db6d028f3",
  "env": "uat",
  "usage": "testing",
  "name": "instance2"
}

有没有办法我可以获得第二种方法的格式,但返回第一种方法给我的所有实例?我想对于其中一个实例中不存在的标签,用法将为空或 null。

标签: amazon-web-servicesjqaws-cli

解决方案


你可以试试这个 jq 过滤器:

jq '.[]|{id,env:.ENVIRONMENT[],usage:(.Usage[]//null),name:.Name[]}' file

这几乎和你一样,除了.Usage[]//null它给出了Usageor if not present null

请注意,您的第一次尝试与以下内容相同:

jq '.[]|flatten' 

(虽然需要 jq 1.5)


推荐阅读