json - 在 jsonnet 中使用条件参数导入
问题描述
我希望能够为导入的变量指定不同的参数并更改导入的行为。例如,我想要以下内容:
local foo = import "foo.libsonnet";
{
"foo1": foo["foo1"],
"foo2": foo["foo2"]
}
foo.libsonnet:(类似于编程中具有默认值的 switch case)我知道以下内容不应该工作。只是可能使用它的伪代码。
{
"foo1": "bar1", // only if foo1 is passed
"foo2": "bar2", // only if foo2 is passed
"bar1" : "bar1_value",//default
"bar2" : "bar2_value" //default
}
输出:
{
"foo1":{
"foo1": "bar1",
"bar1": "bar1_value",
"bar2" : "bar2_value"
},
"foo2":{
"foo2": "bar2",
"bar1": "bar1_value",
"bar2" : "bar2_value"
}
}
解决方案
一个可能的实现,返回一个带有get()
实现“查询”逻辑的方法的对象:
$ cat foo.jsonnet
local foo = import "foo.libsonnet";
{
foo1: foo.get("foo1"),
foo2: foo.get("foo2"),
foo3: foo.get("foo3"),
}
$ cat foo.libsonnet
local data = {
param_q:: {
foo1: "bar1",
foo2: "bar2",
},
const:: {
bar1: "bar1_value",
bar2: "bar2_value",
},
};
// Object with get() method to implement parametrized data return
{
get(q):: (
// const data
data.const +
// parametrized data (if-then-else to support q not in param_q)
if q in data.param_q then { [q]: data.param_q[q] } else {}
),
}
$ jsonnet foo.jsonnet
{
"foo1": {
"bar1": "bar1_value",
"bar2": "bar2_value",
"foo1": "bar1"
},
"foo2": {
"bar1": "bar1_value",
"bar2": "bar2_value",
"foo2": "bar2"
},
"foo3": {
"bar1": "bar1_value",
"bar2": "bar2_value"
}
}
推荐阅读
- python-3.x - cv2.HoughCircles 需要超过 15 分钟才能运行
- javascript - 路由时AngularJs memoryLeak
- javascript - 如何使用firebase函数从文档中查询一个数字并将其全部汇总到firestore中的父文档中
- azure - 构建用于 PowerShell 查询的 Azure API 标头
- c++ - 如何:获取在 C++ 中的 NavigationView 中选择的项目
- matlab - 如何使用 matlab 选择微控制器来实现(在硬件中)脚本
- d3.js - D3js:“如何为不同的值附加不同的路径?”
- android - 如何连接到Android中的数据库?
- javascript - 使用 Firebase Cloud Firestore、Ionic Framework、Angular 获取服务器时间戳的最佳方法是什么?
- javascript - 从 VPC 中的 Lambda 访问 API Gateway - 请求超时