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

如何在jq管道中调用外部bash脚本生成JSON字段值?

解决方案

1. 编写外部处理脚本

先创建可执行的bash脚本myscript.sh,负责接收model值并生成目标字符串:

#!/bin/bash
# 接收第一个参数作为model值,输出计算后的字符串
echo "I am a computed value out of $1"

给脚本添加执行权限:

chmod +x myscript.sh

2. 用jq结合bash循环处理JSON

通过jq拆分原JSON的数组元素,循环调用脚本计算字段值后再重组结构,执行以下命令:

while read -r obj; do
  # 提取当前对象的model字段值
  model=$(echo "$obj" | jq -r '.model')
  # 调用外部脚本获取计算结果
  alt_value=$("./myscript.sh" "$model")
  # 给当前对象添加alternative_model字段
  echo "$obj" | jq --arg alt "$alt_value" '.alternative_model = $alt'
done < <(jq -c '.model[]' input.json) | jq -s '{model: .}'

3. 效果说明

假设你的输入JSON文件是input.json,内容为:

{"model": [{"id": "an-id","path": ["mypath1.txt"],"model": "foo"},{"id": "an-id2","path": ["mypath1.txt"],"model": "foo2"}]}

执行命令后会输出:

{
  "model": [
    {
      "id": "an-id",
      "path": ["mypath1.txt"],
      "model": "foo",
      "alternative_model": "I am a computed value out of foo"
    },
    {
      "id": "an-id2",
      "path": ["mypath1.txt"],
      "model": "foo2",
      "alternative_model": "I am a computed value out of foo2"
    }
  ]
}

注意事项

  • 如果model字段包含空格、引号等特殊字符,脚本中的"$model"会自动处理转义,避免出错。
  • 确保myscript.sh和input.json在当前工作目录下,或者使用绝对路径指定位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:35:21