#python #json
#python #json
Вопрос:
Итак, у меня есть этот JSON
файл:
{
"test": {
"1.0.0": {
"by": "xpath",
"locator": "//div/span/a"
},
"1.0.1": {
"by": "xpath1",
"locator": "//div/span"
},
"1.0.2": {
"by": "xpath2",
"locator": "//div/span"
}
},
"test1": {
"1.0.1": {
"by": "id",
"locator": "add"
},
"1.0.2": {
"by": "id",
"locator": "/ADD"
}
},
"test2": {
"1.0.1": {
"by": "css",
"locator": "div span"
},
"1.0.2": {
"by": "css",
"locator": "div span a"
}
}
}
И я хочу взять 2 ключа ( by
и locator
) из требуемого элемента с именем test1
и номером версии 1.0.1
:
"test1": {
"1.0.1": {
"by": "id",
"locator": "add"
},
Это то, что я попробовал:
with open('file.json') as f:
json_file = load(f)
Получить мой элемент:
item = json_file.get('test1')
for x in item:
if x == `1.0.1`_:
print(item[x]['by'])
print(item[x]['locator'])
Итак, это работает нормально, но мне интересно, как получить это в одной строке без этого for
цикла.
Комментарии:
1. Вам нужно изучить руководство по Python dicts. Это научит вас, как получить доступ к содержимому.
Ответ №1:
Как насчет индексации по ключу?
import json
with open('file.json') as f:
json_file = json.load(f)
json_file["test1"]["1.0.1"]["by"]
json_file["test1"]["1.0.1"]["locator"]
Вы могли бы обернуть эти вызовы в a try - except KeyError
для перехвата, если ключи не существуют. Кроме того, вы можете явно проверить, существует ли ключ, прежде чем использовать его. Что-то вроде:
if "1.0.1" in json_file["test1"]:
print(json_file["test1"]["1.0.1"]["by"])
print(json_file["test1"]["1.0.1"]["locator"])
Вы также можете использовать dict.get
, и если это возвращает None
, то ключ не существует.
version_info = json_file["test1"].get("1.0.1", None)
if version_info is not None: # exists
print(json_file["test1"]["1.0.1"]["by"])
print(json_file["test1"]["1.0.1"]["locator"])
Комментарии:
1. Я хочу знать, существует ли эта версия в файле раньше
2. Я имею в виду, что если у меня версия 1.0.2, этот 1.0.1 тоже подойдет для меня
3. ХОРОШО, итак, ваш последний пример работает для меня, но если я хочу иметь возможность указать версию, которая не включена в файл, но последняя версия тоже хороша? например, в файле есть 1.0.0 и 1.0.4, но у меня версия 1.0.2, поэтому версия 1.0.0 — та, которую я хочу