Shell脚本新手求助:将JSON修改Python代码转换为Shell脚本
用Shell脚本实现指定的JSON数据更新逻辑
在Shell环境中处理JSON,最便捷的工具是jq——一款轻量级的命令行JSON处理器。以下是完全匹配你需求的Shell脚本实现:
脚本实现(基于文件输入)
如果你的JSON数据保存在input.json文件中,使用以下脚本:
#!/bin/bash # 使用jq处理JSON,完成指定更新 jq ' # 遍历所有分组下的每个数组元素 (.[] | .[]) |= ( # 判断当前元素的key2是否为"val2" if .key2 == "val2" then # 给key3的值追加",test" .key3 += ",test" # 若存在key4,同样追加",test";不存在则保持原样 | (if has("key4") then .key4 += ",test" else . end) else # 不符合条件的元素不做修改 . end )' input.json > output.json # 打印更新后的结果(可选) cat output.json
脚本实现(嵌入JSON数据)
如果需要直接在脚本中嵌入原始JSON数据,使用以下版本:
#!/bin/bash # 原始JSON数据 original_json='{ "group1": [ {"key1": "val1", "key2": "val2", "key3": "val3", "key4": "val4"}, {"key1": "bval1", "key2": "val2", "key3": "bval3"}, {"key1": "bval1", "key2": "xval2", "key3": "bval3", "key4": "bval4"} ], "group2": [ {"key1": "zval1", "key2": "val2", "key3": "zval3"}, {"key1": "zbval1", "key2": "zval2", "key3": "zval3"}, {"key1": "bval1", "key2": "xval2", "key3": "bval3"} ] }' # 处理并输出更新后的JSON echo "$original_json" | jq ' (.[] | .[]) |= ( if .key2 == "val2" then .key3 += ",test" | (if has("key4") then .key4 += ",test" else . end) else . end )'
关键逻辑说明
(.[] | .[]):先遍历顶层的所有分组(如group1、group2),再遍历每个分组下的数组元素,确保所有层级的元素都被检查|=:将修改后的结果写回原JSON的对应位置,保证结构不变.key3 += ",test":直接对key3的值进行字符串追加操作has("key4"):检查当前元素是否包含key4,避免不存在时出现错误
前置条件
确保你的系统已安装jq:
- Debian/Ubuntu:
sudo apt install jq - CentOS/RHEL:
sudo yum install jq - macOS:
brew install jq
内容的提问来源于stack exchange,提问作者New Progrommer
相关产品推荐
相关产品推荐

