У меня есть следующий вложенный словарь в формате JSON. Если я хочу получить «id», «self», «name», как мне его проанализировать с помощью программы Python.
{
"items": [
{
"id": "12345",
"links": {
"self": "https://www.google.com"
},
"name": "beast",
"type": "Device"
}
],
"links": {
"self": "https://www.google.com"
},
"paging": {
"count": 1,
"limit": 1,
"offset": 0,
"pages": 1
}
}
@Onyambu да. для них обоих.
Не совсем тот же вопрос, но он должен указать вам правильное направление Разбор значений из файла JSON
Это помогает писать словарь с отступом, чтобы лучше видеть его вложенность:
mydict = {
'items': [
{
'id': '12345',
'links': {'self': 'https://www.google.com'},
'name': 'beast',
'type': 'Device'
}
],
'links': {'self': 'https://www.google.com'},
'paging': {
'count': 1,
'limit': 1,
'offset': 0,
'pages': 1
}
}
Теперь вы можете извлечь то, что хотите:
If I want to get "id", "self", "name",
print(mydict['items'][0]['id'])
print(mydict['items'][0]['links']['self'])
print(mydict['links']['self'])
print(mydict['items'][0]['name'])
Чтобы понять, как настроен ваш json, его проще разбить. Давайте посмотрим на ключи первого словаря и удалим значения.
json = {"items": [], "links": {}}
У вас есть словарь с двумя ключами и двумя значениями. Все три переменные, которые вы ищете (id, self, name), находятся в первом ключе, «items». Итак, давайте погрузимся глубже.
json["items"] = [{'links': {'self': 'https://www.google.com'}, 'name': 'beast', 'type': 'Device', 'id': '12345'}]
Теперь у вас есть список, содержащий словарь со значениями, которые вы ищете, поэтому давайте введем первое и единственное значение списка, содержащего следующий словарь.
json["items"][0] = {'links': {'self': 'https://www.google.com'}, 'id': '12345', 'type': 'Device', 'name': 'beast'}
Наконец, у нас есть словарь с искомыми значениями, поэтому вы можете использовать этот код для поиска имени и идентификатора.
json["items"][0]["name"] = beast
json["items"][0]["id"] = 12345
Переменная self скрыта на один словарь глубже, поэтому нам нужно углубиться в ключ ссылок.
json["items"][0]["links"]["self"] = http://google.com
Теперь у вас есть все ваши значения, вам просто нужно просмотреть все списки и словари, чтобы получить желаемое.
Большое спасибо!
Нет проблем, рад, что смог помочь
Большое вам спасибо, в этом примере речь идет об одном элементе и одном связующем ключах. Как я могу применить это, чтобы получить все элементы и ссылки, если их больше одной?
Это ТАК полезно! Спасибо!
Очень-очень полезно - то, что действительно имеет смысл!
Вы можете написать функцию, которая будет получать нужные вам значения:
def dict_get(x,key,here=None):
x = x.copy()
if here is None: here = []
if x.get(key):
here.append(x.get(key))
x.pop(key)
else:
for i,j in x.items():
if isinstance(x[i],list): dict_get(x[i][0],key,here)
if isinstance(x[i],dict): dict_get(x[i],key,here)
return here
dict_get(a,'id')
['12345']
dict_get(a,'self')
['https://www.google.com', 'https://www.google.com']
dict_get(a,'name')
['beast']
Вы также можете вызвать любую клавишу, которую хотите:
данные
a = {
"items": [
{
"id": "12345",
"links": {
"self": "https://www.google.com"
},
"name": "beast",
"type": "Device"
}
],
"links": {
"self": "https://www.google.com"
},
"paging": {
"count": 1,
"limit": 1,
"offset": 0,
"pages": 1
}
}
Что такое "a" в dict_get (a, id)?
Когда я вызываю функцию, я не получаю никаких результатов. Как вы получили ['' 12345 "]?
@IamL просто запустите функцию еще раз, и я получу именно то, что опубликовал. Можете ли вы скопировать и вставить код еще раз?
Ваш json в основном содержит списки внутри. Доступ к Jsons осуществляется как пары ключ-значение, а доступ к спискам осуществляется с помощью индексов.
json_object['items'][0]['id']
Приведенный выше оператор должен дать вам идентификатор. Мы получаем доступ к ключевым элементам, которые содержат список. У нас есть [0], потому что этот список содержит только один элемент (который снова является парой ключ-значение).
Тот же подход применяется к себе и имени.
json_object['links']['self']
json_object['items'][0]['links']['self']
json_object['items'][0]['name']
Разница между доступом к двум разным `` самим '' означает, что один заключен в список, поэтому нам нужно попасть в список, а другой - словарь с ключом `` я '', который находится внутри словаря `` ссылки ''
какой я? оба из них?