我正在使用Python(2.7)’json’模块来处理各种JSON feed。不幸的是,这些提要中的某些不符合JSON标准-
特别是某些键没有用双语音标记(“)包装。这导致Python出现错误。
我想写一个丑陋的代码来解析和修复传入的数据之前,我想问一下-有什么方法可以让Python解析此格式错误的JSON或“修复”数据,以便有效的JSON?
工作实例
import json
>>> json.loads('{"key1":1,"key2":2,"key3":3}')
{'key3': 3, 'key2': 2, 'key1': 1}
破例
import json
>>> json.loads('{key1:1,key2:2,key3:3}')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\json\__init__.py", line 310, in loads
return _default_decoder.decode(s)
File "C:\Python27\lib\json\decoder.py", line 346, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python27\lib\json\decoder.py", line 362, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 1 (char 1)
我编写了一个小的REGEX来修复来自此特定提供程序的JSON,但我认为这将是将来的问题。以下是我的想法。
>>> import re
>>> s = '{key1:1,key2:2,key3:3}'
>>> s = re.sub('([{,])([^{:\s"]*):', lambda m: '%s"%s":'%(m.group(1),m.group(2)),s)
>>> s
'{"key1":1,"key2":2,"key3":3}'
您正在尝试使用JSON解析器来解析不是JSON的内容。最好的选择是让提要的创建者对其进行修复。
我知道这并不总是可能的。您可能可以使用正则表达式来修复数据,具体取决于数据的破坏程度:
j = re.sub(r"{\s*(\w)", r'{"\1', j)
j = re.sub(r",\s*(\w)", r',"\1', j)
j = re.sub(r"(\w):", r'\1":', j)
问题内容: 我正在尝试将JSON对象解析为Python 。我从没做过 当我搜索这个特定错误( 第一个字符有什么问题吗? )时,其他帖子都说正在加载的字符串实际上不是JSON字符串。我很确定这是。 在这种情况下,效果很好,但是我想知道是否有更合适的方法? 注意: 该字符串直接通过ptt工具来自Twitter。 问题答案: 那绝对不是JSON-无论如何都不是上面打印的。它已经被解析为Python对象-
问题内容: 我一直在努力寻找一种在Python中加载JSON对象的好方法。我发送此json数据: 到后端,它将以字符串形式接收,然后我用来解析它。 但是每次我遇到同样的异常: 我用谷歌搜索,但是除了这个解决方案之外似乎什么都没用,在我个人看来效率不高,因为它接受任何类型的数据,即使不是json格式的数据也是如此。 任何建议将不胜感激。 问题答案: 这个: 不是JSON。 这个: 是JSON。 编辑
问题内容: hibernate中的property标签的lazy属性允许按照以下链接延迟加载属性:http : //docs.jboss.org/hibernate/orm/3.3/reference/en-US/html/mapping.html#mapping- declaration -属性 lazy(可选-默认为false):指定在首次访问实例变量时应延迟获取此属性。它需要构建时字节码检测
问题内容: 好吧,我的疑问很简单:为了获得最佳性能,建议在我不需要使用的属性中始终使用惰性初始化(这很明显)。因此,请想象以下类: 在我的主类中,我将未初始化的具有“ type”属性的人称为“波纹管”: 因此,我从数据库中获得了一个简单的Person对象,并在控制台上打印了person类型。在这一刻,代理CGLIB可以发挥作用,并且可以发挥作用,一切正常。 但是,我在这里提出我的问题: 1-当我请
问题内容: 我有一堂课,有以下领域。这些属性用于在需要调用外部rest API方法时序列化为json对象。 在属性名称中,外部API服务调用需要一些类似json归档名称格式的内容。 就我而言,这可以根据诸如test,dev和prod之类的环境进行更改。因此,我正在寻找一种将listId值移动到app.config中的方法。 我尝试按照以下方式进行操作,但不允许这样做。如果分配常数值,它将起作用。
问题内容: 我有以下(完整)实体类。 我仅需要此类中的两个属性作为JSON响应,即和。其余属性必须被JSON处理/序列化时忽略。 我尝试将拦截器设置如下。 完成此操作后,其余属性预计将被忽略,但似乎不起作用。生成了与所有实体类相关联的SQL语句的数量,这又导致发生其他严重错误,例如, 我在这里想念什么?如何忽略除和以外的所有属性? 我正在使用Struts2-json-plugin-2.3.16。