Вы перебираете словарь , поэтому в цикле for
:
[i['volumes']['0']['id'] for i in json.load(sys.stdin)['server']]
i
- это ключ в словаре server
, который является строкой,Поскольку в словаре 'server'
есть только один ключ, это будет 'volumes'
.
Вам даже не нужен цикл, просто получите доступ к вложенному значению напрямую:
json.load(sys.stdin)['server']['volumes']['0']['id']
Если вы хотите выполнить итерацию по нескольким томам, то выполните итерацию по значениям словаря result['server']['volumes']
:
[vol['id'] for vol in json.load(sys.stdin)['server']['volumes'].values()]
Возможно, вы захотите взглянуть на команду jq
-line Tool вместо извлечения данных JSON в конвейер:
... | jq -r '.server.volumes."0".id'
или, если вам нужны все идентификаторы, а не только для "0"
:
... | jq -r '.server.volumes[] | .id'
Переключатель -r
указывает jq
выводить идентификатор в виде необработанной строки, а не строки в кодировке JSON.