python标准库json只能解析正确格式的json字符串,但对于一些浏览器可以解析但格式错误的json字符串会引发异常,比如下面这个json
{'success':false,'msg':'用户认证失败,用户名或密码错误','action':'location',pop:0,'userName':'xxx'}
标准格式的json规定key与string value要用双引号引起来,这个字符串中却是用的单引号,而且有一个key-value对(pop: 0)没有引起来。使用json.loads()无法解析。有两种方式可以正确解析

使用第三方库demjson

1
2
3
>>> import demjson
>>> demjson.decode("{'success':false,'msg':'用户认证失败,用户名或密码错误','action':'location',pop:0,'userName':'xxx'}")
{'action': 'location', 'userName': 'xxx', 'msg': '用户认证失败,用户名或密码错误', 'success': False, 'pop': 0}

使用js引擎

因为上面那段json字符串可以在浏览器中正确解析,所以可以通过js脚本引擎进行渲染,下面使用的是pyexecjs

1
2
3
import execjs
execjs.eval("{'success':false,'msg':'用户认证失败,用户名或密码错误','action':'location',pop:0,'userName':'xxx'}")
{'action': 'location', 'userName': 'xxx', 'msg': '用户认证失败,用户名或密码错误', 'success': False, 'pop': 0}