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

Jsonnet中传入变量被解析为字面量字符串如何解决

问题原因

原代码中'{"foo": bar}'是被单引号包裹的普通字面量字符串,Jsonnet 不会对字符串包裹范围内的标识符做变量解析,因此内部的bar会被直接当做普通文本处理,无法读取到外部传入的变量值。

修正方案

根据你实际需要的hello字段值类型,选对应写法即可:

场景1:hello需要存储对象类型值

如果不需要把内容转成JSON字符串,直接去掉外层包裹的引号,写标准的对象结构即可,此时bar会被正常识别为变量:

test: if variableA then {
  hello: {
    foo: bar
  }
},

场景2:hello需要存储JSON格式的字符串

如果要求hello的值是序列化后的JSON字符串,优先用Jsonnet标准库的std.manifestJson方法自动完成对象转JSON字符串的操作,该方法会自动处理不同类型变量的转义逻辑,避免手写字符串出现格式错误:

test: if variableA then {
  hello: std.manifestJson({
    foo: bar
  })
},

如果要直接通过字符串插值实现,需要显式声明插值占位符,注意这种写法需要手动处理值的类型匹配(比如bar为数字、布尔值时不要额外加引号):

// bar为字符串类型时的插值写法示例
test: if variableA then {
  hello: '{"foo": "%(bar)s"}' % { bar: bar },
},

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:51:22