Проверить файл JSON с помощью шаблона JSON с помощью python

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

Так выглядит шаблон

{
  "dev":{
    "username": "",
    "script": "",
    "params": ""
  },
  "qat":{
    "username": "",
    "script": "",
    "params": ""
  },
}

файл будет там, где все значения заполнены, для username, script и params как для dev, так и для qat

Теперь я хочу убедиться, что файл с данными в точности совпадает с шаблоном. пока я использую следующий подход.

Подход Преобразуйте эти файлы в dict, а затем получите все ключи. А затем сравните эти ключи, если они равны, файл JSON соответствует шаблону, иначе нет.

Это работает так, как ожидалось, но просто хотел проверить, есть ли более простой подход для этого.

Код:

def test_param_file():
    with open('../utils/param_template.json') as json_data:
        template = json.load(json_data)

    with open('/file.json') as json_data:
        param_file = json.load(json_data)

    assert _get_all_keys(param_file) == _get_all_keys(template)


def _get_all_keys(param):
    global prefix
    global keys
    keys = []

    def func(param):
        for key, value in param.iteritems():
            if type(value) == dict:
                global prefix
                prefix = key
                func(value)

            global keys
            keys.append("%s.%s" % (prefix, key))
    func(param)

    return list(set(keys))
stackoverflow.com/questions/24898797/…
David Zemens 09.03.2018 17:51

Если это работает, и вы хотите улучшить / оптимизировать свой код, вы должны опубликовать его на обзор кода.

IMCoins 09.03.2018 17:51
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
966
1

Ответы 1

Поскольку вы ищете более простой / лучший подход, я рекомендую посмотреть зефирка для такого рода проверок. Вот очень грубый пример:

from marshmallow import Schema, fields

class EnviornmentSchema(Schema):
    username = fields.Str(required=True)
    scripts = fields.Str(required=True)
    params = fields.Str(required=True)

errors = EnviornmentSchema().validate(file_contents_dict)

По сути, он заменяет вашу "шаблонную" систему классом схемы. Вы также можете использовать гнездование, поскольку у вас есть несколько dicts среды. Marshmallow становится очень полезным, когда вам нужно выполнить более сложную проверку.

Другие вопросы по теме