Генерация файлов конфигурации JSON из перестановки набора значений объекта - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь создать набор файлов конфигурации JSON для моей программы. Я обычно передаю файл JSON в командную строку и запускаю симуляцию. Проблема в том, что я хочу изучить множество параметров и создать файлы конфигурации для каждого набора параметров. Например, если мой файл конфигурации выглядит следующим образом:

{
    "A": x,
    "B": "Green",
    "C": {
        "c_a": "O2",
        "c_b": y
        }
    }
}

Я бы хотел перебрать набор значений для каждого ключа, например x = [1, 2, 3] и y = [5, 6, 7]. Я хотел бы иметь решение, позволяющее пользователю определять все параметры сверху, а JSONnet создает все комбинации в разных файлах.

Я немного знаком с JSONnet и знаю, что могу иметь функции и в основномпередать разные значения для каждого ключа и получить новый файл JSON. Но это не очень масштабируемо, и мой конфигурационный файл является вложенным, что делает все более сложным, кроме того, этот метод на самом деле не учитывает перестановку параметров.

Я решил это с помощью сценария оболочки, генерирующего таблицуперестановок, а затем передавая каждую строку в jsonnet в качестве входных данных, но я думаю, что должен быть лучший способ.

Редактировать: если есть способ добиться этого с помощью привязки JSONnet Python, это было бы нормальнотоже.

1 Ответ

1 голос
/ 04 ноября 2019

Вы имеете в виду что-то вроде:

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
...