我正在做一件非常类似于this user was doing的东西:尝试将一个javascript对象声明加载到python字典中。但是,与该用户不同,属性名称不包含在引号中。解析不使用字符串属性名称的javascript对象声明
>>> simplejson.loads('{num1: 1383241561141, num2: 1000}')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/lalalal/site-packages/simplejson/__init__.py", line 385, in loads
return _default_decoder.decode(s)
File "/Users/lalalal/site-packages/simplejson/decoder.py", line 402, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Users/lalalal/site-packages/simplejson/decoder.py", line 418, in raw_decode
obj, end = self.scan_once(s, idx)
simplejson.decoder.JSONDecodeError: Expecting property name: line 1 column 1 (char 1)
这将会是刚刚辉煌,如果我有正确的JSON对象:
>>> simplejson.loads('{"num1": 1383241561141, "num2": 1000}')
{'num1': 1383241561141, 'num2': 1000}
但是,我不知道。我该如何解决这个问题?也许它归结为像正则表达式一样简单?
编辑:This regex说的Martijn写有我一半了,只是如果我有这发生在我的一些示例数据,例如的括号后尾随空白不起作用{ num1: 1383241561141, num2: 1000}'
我会使用正则表达式来引用键,然后将其解析为JSON。 (/,(\ w)+:/ g,',“$ 1”:'),然后使用字符串方法手动清理第一个和最后一个键的字符串。这样,JSON仍然可以完成繁重的工作,而且您只需要以可预测的方式清理一些可预测的字符串。 – dandavis
@dandavis这段代码应该是什么?调用're.sub'? – 2rs2ts
它的参数调用JS的替换方法。 python应该有一些相关的东西,从我使用python的时候就已经很久了,原谅了我。 – dandavis