我尝试用jsonnet自动生成嵌套的模板化json结构,考虑一个仓库结构,你有一个物理站点,在这个站点上有n1个仓库,这些仓库有n2个货架,而这些货架又有n3个货架,以此类推。
输出应该如下所示:
{
"Sites": [
{
"SiteId": 1,
"Warehouses": [
{
"SiteId": 1,
"WarehouseId": "1-1"
},
{
"SiteId": 1,
"WarehouseId": "1-2"
},
{
"SiteId": 1,
"WarehouseId": "1-3"
}
]
},
{
"SiteId": 2,
"Warehouses": [
{
"SiteId": 2,
"WarehouseId": "2-1"
},
{
"SiteId": 2,
"WarehouseId": "2-2"
},
{
"SiteId": 2,
"WarehouseId": "2-3"
}
]
}
]
}
这里重要的是,这应该是模块化的(又名为网站,仓库,过道,机架单独的模板),我希望能够运行每个模块单独,而不是必须生成整个结构各地。
实际上我已经让他用下面的代码工作了:
一个一个一个一个一个x一个一个二个一个x一个一个三个一个x一个一个x一个四个一个
我可以分别运行warehouse.jsonnet和sites.jsonnet来生成仓库或包含仓库的站点。
然而,我正为两个问题而挣扎:
1.把这个放到两个文件中。正如你所看到的,我的解决方案需要jsonnet文件形式的“启动器”,除了运行libsonnet之外,它什么也不做。
1.另外还有冗余,例如属性名“Warehouses”同时出现在warehouses.jsonnet和sites.libsonnet中。
我尝试了我能想到的每一种排列,试图用各自libsonnet文件中的json模板在那里获得顶级函数,或者将冗余的属性名称放入生成属性内容的模板中,属性内容在语义上属于它。我搜索了Stackoverflow、博客、文档等,但我找不到任何有用的东西。我已经在这上面花了两天半的时间。所以我真的很感激这个平台上的大师们的建议。
我试着将json模板移动到函数本身中,或者将jsonnet文件中的顶级函数添加到json模板文件中,每次解析器都抱怨说在那个位置不需要函数。
有没有办法简化我的解决方案?
1条答案
按热度按时间flvlnr441#
请注意,
import
可以(大多数情况下)被认为是使用导入的内联复制代码。我不确定我是否正确理解了您的意思(tbh我看到您的 library 方法相当可靠),尽管如此,下面的单个
all.jsonnet
将上述四个源代码合二为一,并在按照注解中的文档示例调用时按预期工作: