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

如何用jq向已有JSON文件添加带引号的键值对?

解决在JSON的ressummary节点添加带引号数组Check字段的jq方案

示例现有JSON结构

假设你的key.json初始结构如下:

{
  "ressummary": {
    "total": 100,
    "pass": 95
  },
  "metadata": "sample"
}

需求目标

在ressummary节点下添加Check字段,其值为元素带双引号的数组,最终效果如下:

{
  "ressummary": {
    "total": 100,
    "pass": 95,
    "Check": ["\"disk_ok\"", "\"memory_normal\"", "\"network_stable\""]
  },
  "metadata": "sample"
}

正确的jq命令实现

方式1:使用临时文件实现原地修改

适用于所有jq版本,无需额外工具:

jq '.ressummary.Check = ["\"disk_ok\"", "\"memory_normal\"", "\"network_stable\""]' key.json > temp.json && mv temp.json key.json

方式2:用sponge工具简化原地修改

如果系统安装了moreutils包(可通过apt install moreutils或brew install moreutils安装),可以避免临时文件:

jq '.ressummary.Check = ["\"disk_ok\"", "\"memory_normal\"", "\"network_stable\""]' key.json | sponge key.json

错误原因解析

你之前遇到的jq编译错误,大多是因为引号转义处理不当:

  • 直接在shell中写未转义的嵌套双引号(比如[""disk_ok""])会被shell解析为语法错误
  • jq内部要生成带双引号的字符串,必须用\"转义双引号

补充:若仅需普通字符串数组(元素不带额外引号)

如果你的需求是数组元素为普通字符串(而非带引号的字符串),直接去掉内部转义即可:

jq '.ressummary.Check = ["disk_ok", "memory_normal", "network_stable"]' key.json

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:52:17