У меня есть данные Json, к которым я могу получить доступ из моего собственного API

Но данных Json нет в файле .json, а в файле Php (как в ссылке ниже)

Теперь я хочу использовать Python для печати данных

import json
from urllib.request import urlopen
with urlopen("https://**********.000webhostapp.com/api/value/read_all.php") as response:
    source = response.read()
data = source
for item in data['value']['temp']:
    print(item)

Это скрипт Python, который я использую

Это основная ошибка:

для элемента в данных ['значение'] ['temp']:
TypeError: байтовые индексы должны быть целыми числами или срезами, а не str

JSON выглядит так:

{"value":[{"id":"1","temp":"25.60","water":"80%","total":"5L","percent":"50%"}...
0
Mohammed Breky 17 Сен 2018 в 23:04

2 ответа

Лучший ответ

Вам нужно использовать json.loads() для преобразования строки JSON в словарь или список Python. Используйте метод decode() для преобразования байтов в строку.

data = json.loads(source.decode('utf-8'))

Вы также неправильно обращаетесь к JSON. data['value'] - это список словарей, а не сам по себе словарь. Цикл должен быть:

for value in data['value']:
    print(value['temp'])
1
Barmar 17 Сен 2018 в 21:13

Вы используете urlopen для чтения данных с веб-страницы, которая возвращает объект response. Вы можете вызвать response.read(), который вернет байтовую строку. Это просто последовательность байтов, отправленных вашим сайтом.

Поскольку вы предполагаете, что эти байты являются действительными JSON, вы сможете декодировать их в строку, что вы можете сделать с помощью метода bytes.decode. Предполагая, что вы используете кодировку UTF-8, это будет bytes.decode('utf-8')

Чтобы загрузить строку в формате JSON в качестве словаря, вы можете использовать встроенный модуль json, который, как я вижу, вы импортировали в верхней части кода.

Вместе это будет выглядеть так:

import json
from urllib.request import urlopen
with urlopen("https://**********.000webhostapp.com/api/value/read_all.php") as response:
    source = response.read()
    my_string = source.decode('utf-8')
    my_dictionary = json.loads(my_string)

for item in my_dictionary['value']['temp']:
    print(item)
0
Ethan Brews 17 Сен 2018 в 20:25