Как правильно распечатать ответ JSON с помощью Python - PullRequest
0 голосов
/ 25 марта 2019

У меня есть массивы json следующим образом

payload.json

{"provision":"provision section 1",
       "subsets": [{"item":"milk"},{"payments": [{"price": "170 usd"}]},
                   {"item":"sugar"},{"payments": [{"price": "70 usd"}]}, 
                   {"item":"tea"},{"payments": [{"price": "90 usd"}]}]}

Вот код, который я использую для получения ответа json

import json
import requests
r = requests.get('http://localhost/payload.json')
stat=r.status_code
head=r.headers['content-type']
encode=r.encoding
texting=r.text
result=r.json()

print(stat)
print(head)
print(texting)
print(result)

Я могу успешно получить результаты в json

Мои требования: Как мне успешно выполнить циклы для вывода значений для Положений , item и price . Если я попробую что-то вроде print(result.provision), будет отображаться ошибка объект dict не имеет атрибута

Ответы [ 2 ]

2 голосов
/ 25 марта 2019

В этот момент у вас больше нет объекта JSON, JSON был просто способом, которым он транспортировался между сервером и вами;r.json() переводит его в словарь Python .

Вы получаете доступ к ключам словаря Python, например, с помощью result['provision'], и вы можете напечатать это.

Это означает, чтоВы также пометили это с помощью Django, внутри шаблона Django , который вы все равно используете result.provision;он пробует несколько вещей, пока не получит результат, который может распечатать, в том числе случай, когда результат представляет собой словарь и предоставляет ключ для него.

0 голосов
/ 25 марта 2019

Полученная ошибка :

У объекта dict нет атрибута

Причина :

Так как dict не имеет никакого атрибута как такового.

Также :

Как уже говорилось @RemcoGerlich, теперь, когда это диктат, вы можете получить к нему доступ.элементы по:

result = {"provision":"provision section 1",
       "subsets": [{"item":"milk"},{"payments": [{"price": "170 usd"}]},
                   {"item":"sugar"},{"payments": [{"price": "70 usd"}]},
                   {"item":"tea"},{"payments": [{"price": "90 usd"}]}]}

print(result['provision'])
print(result['subsets'])

ИЛИ

for k,v in result.items():
    print(k,v)

ВЫХОД :

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]

РЕДАКТИРОВАТЬ :

Поскольку dict_ имеет элементы со списками:

result = {"provision":"provision section 1",
       "subsets": [
           {"item":"milk"},
           {"payments": [{"price": "170 usd"}]},
           {"item":"sugar"},
           {"payments": [{"price": "70 usd"}]},
           {"item":"tea"},
           {"payments": [{"price": "90 usd"}]}
       ]
          }

Допустим, вы хотите получить первый элемент внутри subsets:

print(result.get('subsets')[0])   # {'item': 'milk'}

Где как;

print(result.get('subsets')[0].values())    # dict_values(['milk'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...