从Php文件访问

时间:2018-09-17 20:04:15

标签: python json

我有一个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%"}...

2 个答案:

答案 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)