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

如何在KSH/BASH脚本中静态/动态构造普通及嵌套JSON对象

KSH/BASH 环境下JSON构造实现方案

以下方案同时兼容KSH、BASH运行环境,不需要依赖第三方工具即可完成普通结构、嵌套结构JSON的静态、动态构造,如果环境装有jq也可以配合做格式校验。

核心注意事项

  • 字符串类型的键、值必须用双引号包裹,内容里的双引号、反斜杠要提前加反斜杠转义
  • 嵌套JSON对象直接作为对应键的值传入即可,不需要额外给对象加双引号
  • 动态拼接时要处理好键值对之间的逗号,避免最后一个键值对末尾多出来逗号导致JSON格式非法

静态构造实现

静态构造适合JSON结构完全固定的场景,直接按照JSON语法把内容赋值给Shell变量就行,实现最简单。

#!/bin/ksh
# 如果用bash执行,把首行shebang改成#!/bin/bash即可

# 静态构造普通结构JSON
normal_json='{
    "param1": "value1",
    "param2": "value2",
    "param3": "value3"
}'
echo "=== 普通静态JSON输出 ==="
echo "$normal_json"

# 静态构造嵌套结构JSON
nested_json='{
    "param1": "value1",
    "param2": "value2",
    "param3": {
        "param4": "value4",
        "param5": "value5"
    }
}'
echo -e "\n=== 嵌套静态JSON输出 ==="
echo "$nested_json"

动态构造实现

动态构造适合键名、键值是脚本运行时才确定的场景,下面给了通用的拼接逻辑,自动处理逗号分隔、字符串转义,支持嵌套结构。

#!/bin/ksh
# 兼容BASH环境

# 初始化JSON根容器
json_result='{'
# 标记是否为第一个键值对,用来控制逗号的添加逻辑
is_first=1

# 键值对添加函数:参数1是键名,参数2是键值(支持传普通字符串、嵌套JSON对象)
add_json_kv() {
    local key="$1"
    local val="$2"
    # 不是第一个键值对的话,先补逗号分隔
    if [ $is_first -ne 1 ]; then
        json_result+=','
    fi
    # 判断值是不是JSON对象(以{开头),对象类型不需要额外包双引号
    if [[ "$val" =~ ^\{ ]]; then
        json_result+="\"$key\":$val"
    else
        # 转义普通字符串里的反斜杠和双引号,避免JSON格式错误
        escaped_val=$(echo "$val" | sed 's/\\/\\\\/g; s/"/\\"/g')
        json_result+="\"$key\":\"$escaped_val\""
    fi
    is_first=0
}

# ---------- 动态构造普通JSON示例 ----------
# 模拟运行时生成的动态变量
dyn_val1="运行时生成值1"
dyn_val2="运行时生成值2"
dyn_val3="运行时生成值3"

# 重置容器状态
json_result='{'
is_first=1
add_json_kv "param1" "$dyn_val1"
add_json_kv "param2" "$dyn_val2"
add_json_kv "param3" "$dyn_val3"
json_result+='}'

echo "=== 动态构造普通JSON输出 ==="
echo "$json_result"

# ---------- 动态构造嵌套JSON示例 ----------
# 先构造内层嵌套对象
inner_obj='{'
is_first=1
inner_val4="嵌套值4"
inner_val5="嵌套值5"
add_json_kv "param4" "$inner_val4"
add_json_kv "param5" "$inner_val5"
inner_obj+='}'

# 构造外层对象,把内层对象作为值传入
json_result='{'
is_first=1
add_json_kv "param1" "外层值1"
add_json_kv "param2" "外层值2"
add_json_kv "param3" "$inner_obj"
json_result+='}'

echo -e "\n=== 动态构造嵌套JSON输出 ==="
echo "$json_result"

补充说明

  • 如果运行环境装了jq,可以把输出结果通过管道传给jq .做自动格式化和合法性校验,比如echo "$json_result" | jq .
  • 如果需要构造带数组的JSON,只需要在add_json_kv函数里加一条判断逻辑,识别以[开头的值为数组类型,不额外包裹双引号即可
  • 上述脚本没有依赖任何外部工具,在标准KSH、BASH环境下都可以直接运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:39:19