我有一个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脚本
这是主要错误:
用于数据中的项目['值'] ['临时']:
TypeError:字节索引必须是整数或切片,而不是str
JSON如下:
{"value":[{"id":"1","temp":"25.60","water":"80%","total":"5L","percent":"50%"}...
答案 0 :(得分:1)
您需要使用json.loads()
将JSON字符串转换为Python字典或列表。使用decode()
方法将字节转换为字符串。
data = json.loads(source.decode('utf-8'))
您还错误地访问了JSON。 data['value']
是字典列表,而不是字典。循环应为:
for value in data['value']:
print(value['temp'])
答案 1 :(得分:0)
您正在使用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)