Python3 json.loads的奇怪错误

2024-05-14 17:38:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用服务api生成JSON响应的web应用程序中使用。函数的以下部分工作正常并返回JSON文本输出:

def get_weather(query = 'london'):
    api_url = "http://api.openweathermap.org/data/2.5/weather?q={}&units=metric&appid=XXXXX****2a6eaf86760c"
    query = urllib.request.quote(query)
    url = api_url.format(query)
    response = urllib.request.urlopen(url)
    data = response.read()    
    return data

返回的输出是:

{"coord":{"lon":-0.13,"lat":51.51},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"base":"cmc stations","main":{"temp":12.95,"pressure":1030,"humidity":68,"temp_min":12.95,"temp_max":12.95,"sea_level":1039.93,"grnd_level":1030},"wind":{"speed":5.11,"deg":279.006},"clouds":{"all":76},"dt":1462290955,"sys":{"message":0.0048,"country":"GB","sunrise":1462249610,"sunset":1462303729},"id":2643743,"name":"London","cod":200}

这意味着data是一个字符串,不是吗?

但是,注释return data,然后添加以下两行:

jsonData = json.loads(data)
return jsonData

生成以下错误:

TypeError: the JSON object must be str, not 'bytes'

怎么了?dataJSON对象,以前作为字符串返回!我要知道错误在哪里?


Tags: apiidjsonurldatareturnmainresponse
1条回答
网友
1楼 · 发布于 2024-05-14 17:38:47

request库返回的数据是一个二进制字符串,而json.loads接受str项,因此需要使用请求返回的编码(通常可以假定它是UTF-8)将数据(decode)转换为字符串。

您应该能够将代码更改为:

return json.loads(data.decode("utf-8"))

PS:在返回变量之前存储变量是多余的,所以我简化了一些事情

相关问题 更多 >

    热门问题