从一组对象值的排列生成 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