amazon-web-services - 使用格式化返回 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。
解决方案
你可以试试这个 jq 过滤器:
jq '.[]|{id,env:.ENVIRONMENT[],usage:(.Usage[]//null),name:.Name[]}' file
这几乎和你一样,除了.Usage[]//null
它给出了Usage
or if not present null
。
请注意,您的第一次尝试与以下内容相同:
jq '.[]|flatten'
(虽然需要 jq 1.5)
推荐阅读
- cadence-workflow - 指定超时前的DecisionTaskTimedOut
- android - 如何在获取请求改造的 URL 中传递数据库查询?
- r - 使用 RcppParallel 中止 R 会话
- scala - “查找奇偶校验异常代码大战 (Scala)”
- r - 在 Rook 中解析 POST 正文
- javascript - 使用 JavaScript 更改活动彩色图像
- compiler-construction - 减少错误有人可以帮助我处理这个 lex 和 grammer 代码
- android - 我在android中添加音频管理器后应用程序崩溃了
- c# - 带有参数化构造函数的 Xamarin DependencyService
- c# - 如何使文本框上的文本选择增加