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

如何用jq将Bash脚本输出格式化为指定JSON并添加自定义值

使用jq将Bash输出转换为指定JSON结构的解决方案

需求说明

需要将Bash输出的多行键值对文本,通过jq工具转换为包含子层级结构的JSON,同时在指定位置添加固定自定义字段"s": "mycustomvalue",并且支持多组输入数据生成对应数组元素。

原始输入

"value1: myv1",
"value2: myv2",
"value3: myv3",
"value4: myv4",
"value5: myv5",
"value6: myv6",
"value7: myv7"

期望输出

{
    "g": [{
            "m": "myv1",
            "v": "myv6",
            "t": "myv3",
            "d": {
                "a": "myv2",
                "r": "myv5",
                "s": "mycustomvalue",
                "o": "myv4",
                "n": "myv7"
            }
        }, {
            "m": "myv1",
            "v": "myv6",
            "t": "myv3",
            "d": {
                "a": "myv2",
                "r": "myv5",            
                "s": "mycustomvalue",
                "o": "myv4",
                "n": "myv7"
            }
        }
    ]
}

解决方案

单组输入转换命令

如果先处理单组输入,将原始文本转为目标结构的单个对象:

cat input.txt | jq -n '
reduce inputs as $line ({};
  ($line | gsub("[\" ,]"; "") | split(":")) as [$key, $val]
  | .[$key] = $val
) | {
  g: [{
    m: .value1,
    v: .value6,
    t: .value3,
    d: {
      a: .value2,
      r: .value5,
      s: "mycustomvalue",
      o: .value4,
      n: .value7
    }
  }]
}'

多组输入处理说明

如果有多组输入(比如多份类似的键值对块,用空行分隔),可使用以下命令批量转换并生成数组:

awk 'BEGIN{RS=""}1' input_multiple.txt | while read -r block; do
  echo "$block" | jq -n '
    reduce inputs as $line ({};
      ($line | gsub("[\" ,]"; "") | split(":")) as [$key, $val]
      | .[$key] = $val
    ) | {
      m: .value1,
      v: .value6,
      t: .value3,
      d: {
        a: .value2,
        r: .value5,
        s: "mycustomvalue",
        o: .value4,
        n: .value7
      }
    }'
done | jq -s '{g: .}'

命令解释

  1. 解析原始输入:通过reduce遍历每一行输入,先清理字符串中的引号、逗号和空格,再按冒号分割键值对,存入临时对象。
  2. 构建目标结构:从临时对象中提取对应值,组装成包含子层级d的对象,同时直接插入自定义字段s: "mycustomvalue"。
  3. 多组处理:用awk按空行分割多组输入,每组单独转换为JSON对象后,用jq -s将所有对象收集到g数组中。

内容的提问来源于stack exchange,提问作者J.S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:22:31