gpt4 book ai didi

Python 3.4.3 json.dumps() "is not JSON serializable"从字节转换时出错

转载 作者:太空宇宙 更新时间:2023-11-03 16:43:59 24 4
gpt4 key购买 nike

所以我遇到了这个问题,我使用 urllib 从服务器获取 JSON 响应,但是当我尝试将返回的 b'' 对象转换为 JSON 时,出现错误说 “...不是 JSON 可序列化”

这是我使用 urllib2 发出 GET 请求的 Python 代码:

    from urllib.request import Request, urlopen
from urllib.error import HTTPError
import json


hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'application/json',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}

file = Request('http://blahblahblah.com', headers=hdr)

try:
page = urlopen(file)
except HTTPError as e:
print(e)
print('')
return

content = page.read()
page.close()


print(page.info().get_content_charset()) # Returns 'utf-8'
print(content)
# print(json.dumps(content)) # Causes 'Not Serializable' Error
# print(content.decode('utf-8') # Causes 'UnicodeEncodeError' Error

这是我从服务器得到的响应:

b'{"game":{"id":1,"name":"Thief II: The Metal Age","slug":"thief-ii-the-metal-age","release_date":"2000-03-21","created_at":"2011-02-13 00:20:38 +0000","updated_at":"2016-03-15 19:41:25 +0000","alternative_names":[{"name":"Thief II: \xd0\xad\xd0\xbf\xd0\xbe\xd1\x85\xd0\xb0 \xd0\xbc\xd0\xb5\xd1\x82\xd0\xb0\xd0\xbb\xd0\xbb\xd0\xb0","comment":"Russian title"},{"name":"Dark Project II: The Metal Age","comment":"German title"},{"name":"Dark Project II: L\'Age de M\xc3\xa9tal","comment":"French title"}],"genres":[{"name":"Shooter"}],"themes":[{"name":"Action"},{"name":"Fantasy"},{"name":"Stealth"}],"rating":9.131189346313477,"release_dates":[{"platform_name":"Microsoft Windows","release_date":"2000-03-21"}],"companies":[{"id":4,"developer":false,"publisher":true,"name":"Eidos Interactive"},{"id":3,"developer":true,"publisher":false,"name":"Looking Glass Studios"},{"id":26,"developer":false,"publisher":true,"name":"Square Enix"}],"cover":{"url":"//res.cloudinary.com/igdb/image/upload/t_cover_small/qagoforxr6tofvpmgy9g.png","width":612,"height":650,"id":"qagoforxr6tofvpmgy9g"},"screenshots":[{"url":"//res.cloudinary.com/igdb/image/upload/t_screenshot_med/z0b9mqcqbtmnnxigekjc.jpg","title":"Microsoft Windows Title Screen","width":640,"height":480,"id":"z0b9mqcqbtmnnxigekjc"},{"url":"//res.cloudinary.com/igdb/image/upload/t_screenshot_med/puvydf5d6v0zirxfhzpg.jpg","title":"Microsoft Windows Ingame Screen","width":640,"height":480,"id":"puvydf5d6v0zirxfhzpg"}],"videos":[{"title":"Trailer","uid":"9C543B6uJ88"}]}}'

我在其他地方读到,我必须首先将响应转换为 str 或使用 utf-8 编码,但是当我尝试替换 print( content)print(content.decode('utf-8') ,我收到以下错误:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 231-235: character maps to <undefined>

最佳答案

服务器返回字节(我记得是Python 2中的字符串),我可以看到它是utf-8,所以你需要将它解码为unicode

例如,这有效:

print(json.loads(content.decode()))

这里是一个链接,您可以在其中找到一些相关信息: https://docs.python.org/3.4/howto/unicode.html

您可能需要使用严格模式,请查看操作方法

关于Python 3.4.3 json.dumps() "is not JSON serializable"从字节转换时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507281/

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