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

如何在Jsonnet中展开嵌套对象以扁平化结构?

如何在Jsonnet中展开对象属性到顶层?

我有如下Jsonnet结构:

{
  _config: {
    v: 3,
  },
  
  obj: {
    [std.char(97 + x)]: x
    for x in std.range(0, $._config.v - 1)
  }
}

它会生成如下JSON:

{
  "_config": {
    "v": 3
  },
  "obj": {
    "a": 0,
    "b": 1,
    "c": 2
  }
}

但我希望展开obj中的属性到顶层对象,最终得到如下结果:

{
  "_config": {
    "v": 3
  },
  "a": 0,
  "b": 1,
  "c": 2
}

请问这是否可以实现?


解决方案

当然可以实现,有两种常用方式:

方式一:直接在顶层生成键值对

不需要先把生成的属性放到obj里,直接在顶层定义这些动态键值对:

{
  _config: {
    v: 3,
  },
  
  // 直接将动态生成的键值对展开到顶层
  [std.char(97 + x)]: x
  for x in std.range(0, $._config.v - 1)
}

方式二:通过对象合并复用原有逻辑

如果需要保留obj的定义(比如后续要复用这个对象),可以用Jsonnet的+运算符将obj的属性合并到顶层对象:

{
  _config: {
    v: 3,
  },
  
  obj: {
    [std.char(97 + x)]: x
    for x in std.range(0, $._config.v - 1)
  }
} + $.obj // 合并obj的属性到顶层,无重复键时直接追加

两种方式运行后都会生成你期望的JSON结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:00:10