Использовать путь JSON в ini-файле

#python #json #ini #configparser

#python #json #ini #configparser

Вопрос:

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

 jsonfile['Data'][0]['Tenants'][0]['TenPropertyGroup']
  

Теперь я хочу передать этот указанный выше путь "['Data'][0]['Tenants'][0]['TenPropertyGroup']" из ini-файла, чтобы убедиться, что я могу вносить изменения в ini-файл, если путь к объекту будет изменен в файле json.

Мой config.ini выглядит так:

 [CONFIG]
TenPropertyGroup= ['Data'][0]['Tenants'][0]['TenPropertyGroups']
  

Мой код Python после чтения из ini-файла выглядит следующим образом

 globalconfig = "config.ini"
config = configparser.ConfigParser()
config.read(globalconfig)

f = open(configfile, )
jsonfile = json.load(f)

TenPropertyGroup = config['CONFIG']['TenPropertyGroup']

TenPropertyGroups = (str(jsonfile )   TenPropertyGroup)
  

Но когда я читаю на Python, используя configparser вышеуказанную группу свойств, имеет строковый тип данных, и я не могу получить список из файла json.

Я пытаюсь правильно прочитать этот ini из кода python, но не могу преобразовать его в object.

Комментарии:

1. eval(TenPropertyGroups) ?

2. eval(TenPropertyGroups) выдает ошибку как invalid syntax (<string>, line 1)

Ответ №1:

Я бы предложил другой подход. Вам следует избегать выполнения текста, прочитанного из файла по соображениям безопасности. Если вы используете другой формат для значения вашего ini файла, вы можете проанализировать его и использовать значения для детализации вашего объекта json. Вот простой пример:

 path_from_ini = 'x/y/z'

json_dict = { 'x' : { 'y' : { 'z' : 42 } } }

parts = path_from_ini.split('/')
v = json_dict

# Drill down into the JSON dictonary
for p in parts:
    v = v[p]

print(v)
  

Комментарии:

1. Привет, спасибо за ответ, но я хотел сделать путь независимым от кода, потому что, если мой объект json будет изменен в данном файле json, мне нужно будет снова изменить код, чтобы внести изменения в path. например, если путь от x/y/z будет изменен на x/w/y/z , тогда мне нужно будет изменить config.ini и мой файл Python также.

2. Спасибо за решение, оно решило мою проблему. Изначально я неправильно понял json_dict часть вашего кода. Позже я получил его и попробовал решение, и оно работает. Большое спасибо за помощь