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

Jsonnet结合字符串格式化与拼接报错,如何实现高可读性字符串构建?

问题与解决

问题描述

想要构建可读性更高、便于后续添加新变量的字符串表达式,编写了如下Jsonnet代码:

std.format('{%s}',
        std.join(', ', [
        std.format('"account": "%s"', dev_account_id),
        std.format('"service": "%s"', business_service),
        std.format('"dir": "%s"', kms_module_dir)
        ])
      )

运行时触发报错:

app_metaflow/shore/main.pipeline.jsonnet:(58:19)-(72:8)\tobject <anonymous>
	During manifestation	
"
RUNTIME ERROR: Missing argument: vals
    /mnt/data/jenkins/workspace/d-platform_fusmltrn-app_metaflow/shore/main.pipeline.jsonnet:63:9-35    thunk from <thunk from <thunk from <object <anonymous>>>>
    /mnt/data/jenkins/workspace/d-platform_fusmltrn-app_metaflow/shore/main.pipeline.jsonnet:(59:9)-(71:11) thunk from <object <anonymous>>
    <std>:769:20-24 thunk from <function <anonymous>>
    <std>:32:25-26  thunk from <function <anonymous>>
    <std>:32:16-27  function <anonymous>
    <std>:769:8-25  function <anonymous>

目标是生成与以下语句等效的字符串,但实现方式更具可读性:

std.format('{&quot;account&quot;: &quot;%s&quot;, &quot;service&quot;: &quot;%s&quot;, &quot;dir&quot;: &quot;%s&quot;}', [dev_account_id, business_service, kms_module_dir])

错误原因

Jsonnet的std.format函数要求第二个参数必须是数组类型的参数列表,你在内部的std.format调用中直接传入了单个变量(如dev_account_id),而非数组,导致函数识别不到必填的vals参数,触发报错。

修正方案

方案1:修正内部std.format的参数传递

把每个内部std.format的变量参数放到数组中,修改后的代码如下:

std.format('{%s}',
  std.join(', ', [
    std.format('"account": "%s"', [dev_account_id]),
    std.format('"service": "%s"', [business_service]),
    std.format('"dir": "%s"', [kms_module_dir])
  ])
)

注:可以把&quot;替换为直接的双引号",Jsonnet中支持字符串内用双引号(只要整个字符串用单引号包裹),可读性会更好。

方案2:更优雅的实现(推荐)

直接构建JSON对象,再用std.json函数转换为字符串,这种方式完全避免手动拼接格式,扩展性和可读性都更强,后续加新字段只需在对象中添加键值对即可:

std.json({
  account: dev_account_id,
  service: business_service,
  dir: kms_module_dir
})

这段代码会生成和目标语句完全等效的JSON字符串,且维护成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:45:05