#python #json #python-3.x
#python #json #python-3.x
Вопрос:
У меня есть вложенный файл JSON json.loads(f)
:
f :
{
"obj1" : {
"obj2" : [
... more objects
]
}
}
Прямо сейчас, если я хочу получить вложенный объект, я сначала получаю obj1, проверяю, нет ли его None, а затем получаю obj2
Однако это становится беспорядочным, если у меня много вложенных объектов: obj1 -> obj2 [0] -> obj3 -> obj4 [0] …..
Как я могу получить безопасность вложенного объекта, не проверяя наличие каждого объекта? Есть ли что-то вроде XPath в Python для JSON? Они могут возвращать None, если какой-либо объект не найден.
Комментарии:
1. Что вы ожидаете получить, когда один из ключей или индексов не существует? Вы можете использовать a
try..except
для перехвата всех ошибок значений.2. @Selcuk Они могут вернуть None, если какой-либо объект не найден.
Ответ №1:
Канонический способ справиться с этим в Python — использовать try...except
и перехватывать конкретную ошибку, в данном случае a KeyError
. Если есть возможность, что вы также будете индексировать в список, вы также можете перехватить IndexError
.
Например:
d = {
"obj1" : {
"obj2" : [1, 2, 3]
}
}
# Good keys
try:
l = d['obj1']['obj2']
except KeyError:
l = None
print(l)
# [1, 2, 3]
# Bad Keys
try:
l = d['obj10']['obj100']
except KeyError:
l = None
print(l)
# None
# Bad Index
try:
l = d['obj1']['obj2'][20]
except (KeyError, IndexError):
l = None
print(l)
# None
Это шаблон, который часто называют EAFP, проще попросить прощения, чем разрешения.