You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中去除jq输出的双引号与转义符且不转为单行

问题解决:生成嵌套JSON格式的Vault密钥输出

当前问题

执行现有命令后,生成的JSON输出将密钥对象拆分为了字符串数组:

{
  "secrets": [
    [
      "{",
      "  \"name\": \"testSecret\",",
      "  \"vault-apikey\": \"kv\",",
      "  \"vault-value\": \"sabrinaTest\"",
      "}"
    ]
  ]
}

但实际需要的是直接嵌套密钥对象的简洁格式:

{
  "secrets": [
    [
        {
           "name" : "testSecret",
           "vault-apikey" : "kv",
           "vault-value" : "sabrinaTest"
        }
    ]
  ]
}

问题原因

原命令中使用了jq -r将处理后的密钥对象转为带换行的字符串,后续又通过split("\n")拆分字符串,最终导致输出是字符串数组而非嵌套的JSON对象。

解决方案

直接通过jq一步完成JSON结构的构建,无需中间字符串转换步骤,修改后的命令如下:

TEST_SECRET_JSON=$(hcp vault-secrets secrets open testSecret --format=json)

echo "$TEST_SECRET_JSON" | jq -n '{ secrets: [ [ {name: .name, "vault-apikey": .type, "vault-value": .static_version.value} ] ] }' >> secret.json

也可以用更简洁的单命令写法,省去变量存储:

hcp vault-secrets secrets open testSecret --format=json | jq -n '{ secrets: [ [ {name: .name, "vault-apikey": .type, "vault-value": .static_version.value} ] ] }' >> secret.json

说明

  • 移除了中间将对象转为字符串的步骤,直接在jq中构建目标嵌套结构
  • { secrets: [ [ ... ] ] } 直接生成包含双层数组的对象,内层数组中就是需要的密钥对象
  • 保留原逻辑中对name、type、static_version.value的字段映射,确保数据对应正确

内容的提问来源于stack exchange,提问作者Sabrina Grosse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 05:34:54