那是完全正确的;
Vari351es包含无效的转义符,JSON标准不允许后面跟数字。
无论产生什么代码,都应该修复。如果那是不可能的,那么您将需要使用正则表达式删除这些转义符,或者将其替换为有效的转义符。
如果我们将
351数字解释为八进制数字,则它将指向Unipre代码点U +
00E9,即
é字符(带有ACUTE的拉丁文小写字母E)。您可以使用以下方法“修复” JSON输入:
import reinvalid_escape = re.compile(r'\[0-7]{1,6}') # up to 6 digits for prepoints up to FFFFdef replace_with_prepoint(match): return unichr(int(match.group(0)[1:], 8))def repair(brokenjson): return invalid_escape.sub(replace_with_prepoint, brokenjson)使用
repair()您的示例可以加载:
>>> json.loads(repair(r'{"translatedatt1":"Vari351es"}')){u'translatedatt1': u'Varixe9es'}您可能需要调整代码点的解释。我选择八进制(因为它
Variées是一个实际的单词),但是您需要使用其他代码点对其进行更多测试。



