gpt4 book ai didi

python - 解码 json 时出现 ValueError

转载 作者:太空狗 更新时间:2023-10-30 02:49:28 25 4
gpt4 key购买 nike

import json
import urllib
import re
import binascii

def asciirepl(match):
s = match.group()
return binascii.unhexlify(s[2:])

query = 'google'
p = urllib.urlopen('http://www.google.com/dictionary/json?callback=a&q='+query+'&sl=en&tl=en&restrict=pr,de&client=te')
page = p.read()[2:-10] #As its returned as a function call

#To replace hex characters with ascii characters
p = re.compile(r'\\x(\w{2})')
ascii_string = p.sub(asciirepl, page)

#Now decoding cleaned json response
data = json.loads(ascii_string)

运行它,我得到这个错误,

shadyabhi@archlinux /tmp $ python2 define.py                                                                                                                                      
Traceback (most recent call last):
File "define.py", line 19, in <module>
data = json.loads(ascii_string)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 1 column 403 (char 403)

据我所知,json 没有任何错误,因为我从谷歌的服务器收到了它。我所做的只是删除十六进制字符。任何帮助将不胜感激。

最佳答案

解码\x 转义可能会产生 "标记,当它们出现在 JSON 数据中编码的“字符串”中时,需要重新转义。

def asciirepl(match):
chr = binascii.unhexlify(match.group()[2:])
return '\\' + chr if chr in ('\\"') else chr

那仍然不能处理控制字符;因此您可能希望将\x 转义符转换为\u 转义符,这在 JSON 标准中有描述并由 json 模块解析。这具有更简单的附带好处:)

def asciirepl(match):
return '\\u00' + match.group()[2:]

关于python - 解码 json 时出现 ValueError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8011692/

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