如何用jq及其他工具在Bash中实现基于JSON模型的简单模板渲染?
jq实现JSON驱动的模板渲染
jq完全支持这类基于JSON数据的模板渲染,而且天生适配JSON结构,比envsubst更高效简洁,能直接处理嵌套数组、对象这类复杂JSON路径的插值需求。
具体实现步骤
假设你有:
- JSON数据文件
data.json:
{ "a": 1, "b": [1, 2], "c": [{ "x": 1 }, { "x": 2 }] }
- 模板文件
template.txt:
A is {.a} and B is an array {.b}. There is also c[].x = {.c[].x}
方法:通过sed转换模板格式 + jq渲染
执行以下命令即可得到预期结果:
# 将模板中的{.path}转换为jq支持的插值语法 render_template=$(sed 's/{.\([^}]*\)}/\($data\1)/g' template.txt) # 用jq加载JSON数据并渲染模板 jq --arg tmpl "$render_template" -n '$data = input; printf "\($tmpl)"' data.json
结果验证
执行后会输出:
A is 1 and B is an array [1,2]. There is also c[].x = [1,2]
核心优势
- 原生支持JSON路径解析:像
.c[].x这类嵌套数组的取值,jq能直接提取所有x字段值组成数组,无需额外处理; - 自动类型转换:JSON中的数字、数组会自动转换成符合预期的字符串格式,无需手动拼接;
- 避免envsubst的繁琐:无需把JSON拆成环境变量,直接基于原始JSON数据渲染。
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

