gpt4 book ai didi

json - 获取 JSON 错误 : the JSON object must be str, 而不是 'bytes'

转载 作者:行者123 更新时间:2023-12-01 09:46:48 25 4
gpt4 key购买 nike

试图将一个脚本从 Python 2 翻译成 Python 3,以便制作一个脚本来获取从 narodmon.ru 到 Domiticz/的天气指示

#!/usr/bin/env python3.5
# -*- coding: utf-8 -*-
import urllib.request, urllib.error, urllib.parse
import json
import hashlib
import uuid

api_key = '********'
app_id = str(uuid.getnode())
md5_app_id = hashlib.md5(app_id.encode('utf-8')).hexdigest()
data = {
'cmd': 'sensorsNearby',
'uuid': md5_app_id,
'api_key': api_key,
'radius': 11,
'lat': 55.75,
'lng': 37.62,
'lang': 'ru'
}

try:
request = urllib.request.Request('http://narodmon.ru/api',json.dumps(data).encode("utf-8"))
response = urllib.request.urlopen(request)
result = json.loads(response.read())
print((json.dumps(result, indent=4, sort_keys=True)))
except urllib.error.URLError as e:
print('HTTP error:', e)
except (ValueError, TypeError) as e:
print('JSON error:', e)

然后报错

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

我哪里错了?非常感谢

最佳答案

response.read() 返回一个 bytes 对象,它就是:一个字节序列。您需要先对其进行解码,因为 Python 不知道这些字节代表什么。

buf = response.read()
result = json.loads(buf.decode('utf-8'))

除非您处理大量非 ASCII 字符,否则很容易将 Unicode 字符串与其 UTF-8 编码混淆。

>>> 'foo'
'foo'
>>> 'foo'.encode('utf-8')
b'foo'
>>> 'föö'
'föö'
>>> 'föö'.encode('utf-8')
b'f\xc3\xb6\xc3\xb6'

关于json - 获取 JSON 错误 : the JSON object must be str, 而不是 'bytes',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47060603/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com