如何在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
相关产品推荐
相关产品推荐

