首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMESPath加入输出并去掉不需要的字符

JMESPath加入输出并去掉不需要的字符
EN

Stack Overflow用户
提问于 2021-01-15 13:19:54
回答 1查看 1.1K关注 0票数 2

我有下面的json;

代码语言:javascript
复制
[
  {
    "compartment-id": "CompartmentID-123",
    "defined-tags": {},
    "display-name": "Test-123",
    "freeform-tags": {},
    "id": "ID-ABC",
    "kms-key-id": "",
    "lifecycle-state": "ACTIVE",
  }
]

我希望将iddisplay-name参数加入到逗号分隔字符串中,去掉"[],如下所示:

代码语言:javascript
复制
ID-ABC,Test-123

到目前为止,我做的最接近的事情是:

代码语言:javascript
复制
oci fs file-system list -c $compart --availability-domain $ad --query 'data[].[id,"display-name"][]' | tr -d '" '
[
ID-ABC,
Test-123
]

想知道在JMESPath中是否有一种更干净的方法来完成这一切,而不需要管道输出到trjqsedawk

基于输入的β.εηοιτ.βε更新

这么近..。

代码语言:javascript
复制
oci fs file-system list -c $compart --availability-domain $ad3 --query 'data[0].join(',', [id, "display-name"])'

返回

代码语言:javascript
复制
ParseError: invalid token: Parse error at column 13, token "," (COMMA), for expression:
"data[0].join(,, [id, "display-name"])"

然而,玩弄引号,我能得到的最好是通过使用;

代码语言:javascript
复制
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是否有什么问题,它被引号弄糊涂了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-16 14:55:20

因为您确实有一个数组,所以您首先需要针对数组的第一个元素,以摆脱它。由于数组是基于0的,所以这可以很容易地通过以下方法实现:

代码语言:javascript
复制
data[0]

这给

代码语言:javascript
复制
{
  "compartment-id": "CompartmentID-123",
  "defined-tags": {},
  "display-name": "Test-123",
  "freeform-tags": {},
  "id": "ID-ABC",
  "kms-key-id": "",
  "lifecycle-state": "ACTIVE"
}

然后,为了创建要查找的字符串,可以使用join函数,该函数接受粘合字符和数组作为参数。

您可以使用筛选器和多选择列表很容易地获得所查找的数组。

代码语言:javascript
复制
data[0].[id, "display-name"]

这给

代码语言:javascript
复制
[
  "ID-ABC",
  "Test-123"
]

现在,我们只需要在所有这些之上应用join函数:

代码语言:javascript
复制
data[0].join(',', [id, "display-name"])

它最终给出:

代码语言:javascript
复制
"ID-ABC,Test-123"

关于在JMESPath中引用的补充说明:

  • “一些-字符串” 是一个原始字串,不会被解释
  • some-string 是另一种形式的原始字串,不会被解释
  • “一些-字符串” 是一个文字表达式,并将进行解释。

所以:

代码语言:javascript
复制
data[0].join(',', [id, "display-name"])

代码语言:javascript
复制
data[0].join(`,`, [id, "display-name"])

是两个严格相等的查询。

代码语言:javascript
复制
data[0].join(',', [id, 'display-name'])

具有完全不同的含义,并以字符串display-name作为数组的第二个元素结束,因此它将导致

代码语言:javascript
复制
"ID-ABC,display-name"

所有这些都基于JSON结构:

代码语言:javascript
复制
{
   "data":[
      {
         "compartment-id":"CompartmentID-123",
         "defined-tags":{},
         "display-name":"Test-123",
         "freeform-tags":{},
         "id":"ID-ABC",
         "kms-key-id":"",
         "lifecycle-state":"ACTIVE"
      }
   ]
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65736850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档