从一组对象值的排列生成 JSON 个配置文件
Generating JSON config files from permutation of set of object values
我正在尝试为我的程序创建一组 JSON 配置文件。我通常将 JSON 文件传递给命令行,并 运行 我的模拟。问题是我想探索很多参数,我想为每组参数创建一个配置文件。例如,如果我的配置文件如下所示:
{
"A": x,
"B": "Green",
"C": {
"c_a": "O2",
"c_b": y
}
}
}
我想为每个键迭代一组值,例如 x = [1, 2, 3]
和 y = [5, 6, 7]
。我想要一个解决方案,用户可以在顶部定义所有参数并且 JSONnet 生成不同文件中的所有组合。
我对 JSONnet 有点熟悉,我知道我可以有函数,基本上可以为每个键传递不同的值,并有一个新的 json 文件。但这不是很好的可扩展性,而且我的配置文件是嵌套的,这使得一切变得更加复杂,而且这种方法并不能真正解决参数的排列问题。
我已经通过生成 table 排列的 shell 脚本解决了这个问题,然后将每一行作为输入传递给 jsonnet,但我认为应该有更好的方法。
编辑:如果有办法使用 JSONnet Python 绑定实现此目的,那也可以。
你的意思是:
import json
import itertools
params_info = {
"x": [ 1, 2, 3],
"y": [ "a", "b", "c"],
"z": [ "A", "B", "C"],
}
for param_vals in itertools.product(*params_info.values()):
params = dict(zip(params_info.keys(), param_vals))
data = {
"A": params["x"],
"B": "Green",
"C": {
"c_a": "O2",
"c_b": params["y"],
"c_c": ["D", "E", "F", params["z"]]
}
}
jsonstr = json.dumps(data) # use json.dump if you want to dump to a file
print(jsonstr)
# add code here to do something with json
我正在尝试为我的程序创建一组 JSON 配置文件。我通常将 JSON 文件传递给命令行,并 运行 我的模拟。问题是我想探索很多参数,我想为每组参数创建一个配置文件。例如,如果我的配置文件如下所示:
{
"A": x,
"B": "Green",
"C": {
"c_a": "O2",
"c_b": y
}
}
}
我想为每个键迭代一组值,例如 x = [1, 2, 3]
和 y = [5, 6, 7]
。我想要一个解决方案,用户可以在顶部定义所有参数并且 JSONnet 生成不同文件中的所有组合。
我对 JSONnet 有点熟悉,我知道我可以有函数,基本上可以为每个键传递不同的值,并有一个新的 json 文件。但这不是很好的可扩展性,而且我的配置文件是嵌套的,这使得一切变得更加复杂,而且这种方法并不能真正解决参数的排列问题。
我已经通过生成 table 排列的 shell 脚本解决了这个问题,然后将每一行作为输入传递给 jsonnet,但我认为应该有更好的方法。
编辑:如果有办法使用 JSONnet Python 绑定实现此目的,那也可以。
你的意思是:
import json
import itertools
params_info = {
"x": [ 1, 2, 3],
"y": [ "a", "b", "c"],
"z": [ "A", "B", "C"],
}
for param_vals in itertools.product(*params_info.values()):
params = dict(zip(params_info.keys(), param_vals))
data = {
"A": params["x"],
"B": "Green",
"C": {
"c_a": "O2",
"c_b": params["y"],
"c_c": ["D", "E", "F", params["z"]]
}
}
jsonstr = json.dumps(data) # use json.dump if you want to dump to a file
print(jsonstr)
# add code here to do something with json