我有下面的json;
[
{
"compartment-id": "CompartmentID-123",
"defined-tags": {},
"display-name": "Test-123",
"freeform-tags": {},
"id": "ID-ABC",
"kms-key-id": "",
"lifecycle-state": "ACTIVE",
}
]我希望将id和display-name参数加入到逗号分隔字符串中,去掉"和[],如下所示:
ID-ABC,Test-123到目前为止,我做的最接近的事情是:
oci fs file-system list -c $compart --availability-domain $ad --query 'data[].[id,"display-name"][]' | tr -d '" '
[
ID-ABC,
Test-123
]想知道在JMESPath中是否有一种更干净的方法来完成这一切,而不需要管道输出到tr、jq、sed或awk等
基于输入的β.εηοιτ.βε更新
这么近..。
oci fs file-system list -c $compart --availability-domain $ad3 --query 'data[0].join(',', [id, "display-name"])'返回
ParseError: invalid token: Parse error at column 13, token "," (COMMA), for expression:
"data[0].join(,, [id, "display-name"])"然而,玩弄引号,我能得到的最好是通过使用;
oci fs file-system list -c $compart --availability-domain $ad3 --query "data[0].join(',', [id, 'display-name'])"
Private key passphrase:
"ID-ABC,display-name"我开始怀疑我的本地设置或shell是否有什么问题,它被引号弄糊涂了吗?
发布于 2021-01-16 14:55:20
因为您确实有一个数组,所以您首先需要针对数组的第一个元素,以摆脱它。由于数组是基于0的,所以这可以很容易地通过以下方法实现:
data[0]这给
{
"compartment-id": "CompartmentID-123",
"defined-tags": {},
"display-name": "Test-123",
"freeform-tags": {},
"id": "ID-ABC",
"kms-key-id": "",
"lifecycle-state": "ACTIVE"
}然后,为了创建要查找的字符串,可以使用join函数,该函数接受粘合字符和数组作为参数。
您可以使用筛选器和多选择列表很容易地获得所查找的数组。
data[0].[id, "display-name"]这给
[
"ID-ABC",
"Test-123"
]现在,我们只需要在所有这些之上应用join函数:
data[0].join(',', [id, "display-name"])它最终给出:
"ID-ABC,Test-123"关于在JMESPath中引用的补充说明:
所以:
data[0].join(',', [id, "display-name"])和
data[0].join(`,`, [id, "display-name"])是两个严格相等的查询。
而
data[0].join(',', [id, 'display-name'])具有完全不同的含义,并以字符串display-name作为数组的第二个元素结束,因此它将导致
"ID-ABC,display-name"所有这些都基于JSON结构:
{
"data":[
{
"compartment-id":"CompartmentID-123",
"defined-tags":{},
"display-name":"Test-123",
"freeform-tags":{},
"id":"ID-ABC",
"kms-key-id":"",
"lifecycle-state":"ACTIVE"
}
]
}https://stackoverflow.com/questions/65736850
复制相似问题