python 解析服务器返回的 json 数据

2014-05-11 12:47:30 +08:00
 shoumu
服务器返回json数据中带有 'a': true 这样的条目,用python自带的json模块解析会出错
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
请问有什么方法解析呢
5056 次点击
所在节点    Python
11 条回复
ferock
2014-05-11 12:49:55 +08:00
服务器的返回也太不规范了
yyfearth
2014-05-11 12:52:43 +08:00
估计是用String拼出来的
yyfearth
2014-05-11 12:54:27 +08:00
如果还算标准 可以尝试用 " 替换掉所有 '
如果有没有引号的情况 那要用正则把key加上引号
如果还不行 那么就没有办法了 估计只有js eval可以解析了
shoumu
2014-05-11 13:12:51 +08:00
@yyfearth 在命令行中测试是可行的的
>>> jsonStr = '{"a":true}'
>>> a = json.loads(jsonStr)
>>> a
{u'a': True}
但是一些到文件中,再读取出来就不行了
winkidney
2014-05-11 13:44:24 +08:00
考虑是不是unicode问题?返回的jso是gbk还是utf-8?编码错误可能性比较大的感觉……
shoumu
2014-05-11 14:12:54 +08:00
@winkidney 可能编码问题,我自己的那些数据是放在一个txt文件里。从同学那里拿了一个json文件,将txt文件里的数据复制到那个文件中,就能够正确解析了,很诡异。
在sublime中显示我的txt编码为:UTF-8 with BOM,另一个json文件直接是UTF-8
polythene
2014-05-11 14:15:35 +08:00
@shoumu 不要加BOM,BOM会在前面插入3个额外字符,json库当然不认了
ericls
2014-05-11 14:28:10 +08:00
json.loads(foo,strict=False)
winkidney
2014-05-11 15:19:15 +08:00
@shoumu BOM会让python读取错误的,你去掉BOM,网上一大堆教程,随意一搜~
est
2014-05-11 15:38:04 +08:00
@shoumu 这么久还没人发现问题嘛。。我来回答好了。json标准禁止使用单引号。
shoumu
2014-05-11 17:03:20 +08:00
@est 不好意思,问题中的 'a': true 我打错了,应该是双引号,应该是BOM的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/112007

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX