gpt4 book ai didi

python - 无法用python解析 simplejson

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:35 25 4
gpt4 key购买 nike

我有一个非常简单的 json,我无法使用 simplejson 模块进行解析。复制:

import simplejson as json
json.loads(r'{"translatedatt1":"Vari\351es"}')

结果:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/pymodules/python2.5/simplejson/__init__.py", line 307, in loads
return _default_decoder.decode(s)
File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 335, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 351, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Invalid \escape: line 1 column 23 (char 23)

有人知道哪里出了问题以及如何正确解析上面的 json 吗?

那里编码的字符串是:Variées

附言我使用 python 2.5

非常感谢!

最佳答案

那是非常正确的; Vari\351es 包含无效转义,JSON 标准不允许 \ 后跟数字。

无论生成该代码的是什么,都应该修复。如果这不可能,您将需要使用正则表达式来删除这些转义符,或将它们替换为有效的转义符。

如果我们将 351 数字解释为八进制数,它将指向 unicode 代码点 U+00E9,é 字符(带尖音符号的拉丁文小写字母 E ).您可以“修复”您的 JSON 输入:

import re

invalid_escape = re.compile(r'\\[0-7]{1,6}') # up to 6 digits for codepoints up to FFFF

def replace_with_codepoint(match):
return unichr(int(match.group(0)[1:], 8))


def repair(brokenjson):
return invalid_escape.sub(replace_with_codepoint, brokenjson)

使用 repair() 可以加载您的示例:

>>> json.loads(repair(r'{"translatedatt1":"Vari\351es"}'))
{u'translatedatt1': u'Vari\xe9es'}

您可能需要调整代码点的解释;我选择八进制(因为 Variées 是一个实际的词),但您需要使用其他代码点进行更多测试。

关于python - 无法用python解析 simplejson ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674057/

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