чтение файла шаблона JSON и создание нового файла с заменами в bash или Python

#python #json

#python #json

Вопрос:

Я хочу иметь немного другой файл JSON для разных сред.

Если я создам файл шаблона с какими-то переменными, которые затем будут заменены на основе переменных среды, каков самый простой способ реализовать это?

Я искал библиотеку python для создания шаблонов, и это неизбежно приводит к шаблонам HTML. Будет ли какой-либо из них работать с файлом json?

Я мог бы использовать json.load , а затем писать с json.dumps помощью, но как я буду выполнять замены?

Эта задача также может быть реализована в bash вместо python.

Файл содержит документацию swagger.

Ответ №1:

Все, что вам нужно, это заполнители, затем откройте файл, вызовите .replace несколько раз (или используйте re.sub с функцией), а затем используйте json.loads с сгенерированной строкой.

test.json

 {"param":  "<param placeholder>"}
  

Затем

 import json

with open('test.json') as f:
    template_json = f.read()

after_replace = template_json.replace('<param placeholder>', 'param value')
print(json.loads(after_replace))
  

выводит

 {'param': 'param value'}
  

Использование re.sub с функцией и dict:

test.json

 {
  "param1":  "<param1 placeholder>",
  "param2":  "<param2 placeholder>",
  "param3":  "<param3 placeholder>"
}
  

Затем

 import json
import re

with open('test.json') as f:
    template_json = f.read()

values = {
    'param1': 'param1 value',
    'param2': 'param2 value',
    'param3': 'param3 value'
}

after_replace = re.sub('<(. ?) placeholder>', lambda match: values.get(match.group(1)), template_json)
print(json.loads(after_replace))
  

выводит

 {'param1': 'param1 value', 'param2': 'param2 value', 'param3': 'param3 value'}