首页 > 解决方案 > 从一组对象值的排列生成 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 文件。但这不是很可扩展,而且我的配置文件是嵌套的,这使得一切都变得更加复杂,而且这种方法并不能真正解决参数的排列问题。

我已经用一个生成排列表的shell脚本解决了这个问题,然后将每一行作为输入传递给jsonnet,但我认为应该有更好的方法。

编辑:如果有办法使用 JSONnet Python 绑定来实现这一点,那也可以。

标签: pythonjsonjsonnet

解决方案


你的意思是这样的:

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

推荐阅读