当前位置: 首页 > 面试题库 >

无法使用python解析简单的json

轩辕鸿
2023-03-14
问题内容

我有一个非常简单的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

PS我使用python 2.5

非常感谢!


问题答案:

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

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

如果我们将351数字解释为八进制数字,则它将指向Unicode代码点U +
00E9,即é字符(带有ACUTE的拉丁文小写字母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是一个实际的单词),但是您需要使用其他代码点对其进行更多测试。



 类似资料:
  • 问题内容: 我正在尝试解析WSDL以获取操作,端点和示例有效负载。用户输入的WSDL。我找不到执行此操作的教程。 我只能找到那些生成不需要的源代码的代码。我尝试使用XBeans,但显然我需要Saxon。没有撒克逊人,有没有简单的轻巧的方法来做到这一点? 例如 应该进行操作:GetLastTradePrice,GetLastTradePrice 端点:StockQuotePort 有效负载样本: 这

  • 本文向大家介绍Python random模块用法解析及简单示例,包括了Python random模块用法解析及简单示例的使用技巧和注意事项,需要的朋友参考一下 用法示例: 生成一个六位随机验证码 结果: 结果展示: 总结 以上就是本文关于Python random模块用法解析及简单示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站: 你真的了解Python的random模块吗? Py

  • 本文向大家介绍Python实现简单HTML表格解析的方法,包括了Python实现简单HTML表格解析的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现简单HTML表格解析的方法。分享给大家供大家参考。具体分析如下: 这里依赖libxml2dom,确保首先安装!导入到你的脚步并调用parse_tables() 函数。 1. source = a string contai

  • 本文向大家介绍Python解析最简单的验证码,包括了Python解析最简单的验证码的使用技巧和注意事项,需要的朋友参考一下 最近在学python,正好遇到学校需要选宿舍,就用python写了一个抢宿舍的软件。其中有一个模块是用来登陆的,登陆的时候需要输入验证码,不过后来发现了直接可以绕过验证码直接登陆的bug。不过这是另外的话题,开始的时候我并没有发现这个隐藏起来的秘密,所以我就写了这个pytho

  • 我的问题是:在PHP中,解析SRU请求返回的XML的最简单方法是什么? 例如,在浏览器中查看以下URL: http://explor.bcu.ac.uk/IntraLibrary-SRU?operation=searchRetrieve 此对公共存储库的查询返回符合SRU标准的格式良好的XML文档(它进行验证),在本例中返回两条记录。我使用过各种排列的simplexml\u load\u stri

  • 问题内容: 我需要通过Qt解析JSON对象。最简单/最快的方法是什么? 问题答案: 试试QJson。 QJson是积极开发的(如果没有记错的话,将由KDE使用)。最好的办法是直接签出源代码并自己构建。没有对QJson的依赖(Qt和CMake除外)。使用起来也很简单,请看一些用法示例: http://qjson.sourceforge.net/usage/