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

如何用JQ提取多键值并生成无引号的单行格式化输出?

解决jq输出无引号逗号分隔文本的问题

问题背景

你有这样的JSON输入:

[
  {
    "Header": {
      "Tenant": "Test-d1",
      "Stage": "dev",
      "ProductType": "b2b",
      "Rcode": 401
    },
    "Body": {
      "error": {
        "code": 401,
        "message": "Unsupported authorization scheme"
      }
    }
  },
  {
    "Header": {
      "Tenant": "2734d7ac0f0e",
      "Stage": "unknown",
      "ProductType": "unknown",
      "Rcode": 404
    },
    "Body": {
      "error": {
        "code": 404,
        "message": "Not found"
      }
    }
  }
]

想要提取指定字段值,输出成无引号的逗号分隔格式:

Test-d1, dev, b2b, Unsupported authorization scheme, 401
2734d7ac0f0e, unknown, unknown, Not found, 404

之前用jq -r .[] | [ .Header.Tenant, .Header.Stage, .Header.ProductType, .Body.error.message, .Body.error.code ] | @csv会自动给值加双引号,不符合需求。

解决方案

用join(", ")替代@csv即可实现无引号的直接拼接,对应的jq命令如下:

jq -r '.[] | [.Header.Tenant, .Header.Stage, .Header.ProductType, .Body.error.message, .Body.error.code] | join(", ")'

如果需要严格无空格的逗号分隔(比如Test-d1,dev,b2b,...),把join(", ")改成join(",")就行。

原理说明

@csv是jq专门用于生成符合CSV规范的输出,会自动给包含逗号、空格等特殊字符的字段添加双引号;而join(sep)是简单地将数组中的每个元素用指定分隔符连接,不会添加任何额外的引号,完全满足你要的无引号输出需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 23:02:58