如何使用simplejson解码以下数据?
我从一个网址获取了一些数据,发现这些数据是用Jason格式存储的。但是当我尝试用simplejson.loads(data)来解析这些数据时,程序报错了。
这是我第一次处理Jason数据,有什么建议可以帮助我解码这些数据吗?谢谢!
=================
result = simplejson.loads(data, encoding="utf-8")
在"F:\My Documents\My Dropbox\StockDataDownloader\simplejson__init__.py"的第401行,loads函数里:
return cls(encoding=encoding, **kw).decode(s)
在"F:\My Documents\My Dropbox\StockDataDownloader\simplejson\decoder.py"的第402行,decode函数里:
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
在"F:\My Documents\My Dropbox\StockDataDownloader\simplejson\decoder.py"的第420行,raw_decode函数里:
raise JSONDecodeError("无法解码JSON对象", s, idx)
simplejson.decoder.JSONDecodeError: 无法解码JSON对象:第1行 第0列 (字符0)
============================
data = "{identifier:'ID', label:'截至2010年8月4日星期三下午5:05',items:[{ID:0,N:'2ndChance',NC:'528',R:'NONE',I:'NONE',M:'-',LT:0.335,C:0.015,VL:51.000,BV:20.000,B:0.330,S:0.345,SV:20.000,O:0.335,H:0.335,L:0.335,V:17085.000,SC:'4',PV:0.320,P:4.6875,P_:'X',V_:''},{ID:1,N:'8Telecom',NC:'E25',R:'NONE',I:'NONE',M:'-',LT:0.190,C:0.000,VL:965.000,BV:1305.000,B:0.185,S:0.190,SV:641.000,O:0.185,H:0.190,L:0.185,V:179525.000,SC:'2',PV:0.190,P:0.0,P_:'X',V_:''},{ID:2,N:'A-Sonic',NC:'A53',R:'NONE',I:'NONE',M:'-',LT:0.090,C:0.005,VL:1278.000,BV:17.000,B:0.090,S:0.095,SV:346.000,O:0.090,H:0.090,L:0.090,V:115020.000,SC:'A',PV:0.085,P:5.882352734375,P_:'X',V_:''},{ID:3,N:'AA Grp',NC:'5GZ',R:'NONE',I:'NONE',M:'t',LT:0.000,C:0.000,VL:0.000,BV:100.000,B:0.050,S:0.060,SV:50.000,O:0.000,H:0.000,L:0.000,V:0.000,SC:'2',PV:0.050,P:0.0,P_:'X',V_:''}]}"
1 个回答
你在使用 simplejson
的时候是对的,但给你数据的网站没有正确使用 JSON 格式。你可以看看 json.org,那里用简单的语法图示解释了什么是 JSON:在 对象 的图示中,{
后面(除非对象是空的,那样的话后面会直接跟一个 }
),JSON 总是会有一个 字符串 —— 就像你在 那个图示中看到的,这个字符串是以双引号开头的。所以,字符串的开头部分:
{identifier:
告诉你这不是正确的 JSON —— 因为单词 identifier
周围没有双引号。
解决这个问题并不简单,光是意识到这个问题还不够,但我想让你放心,至少你的代码是没问题的。唉 看来那些坏掉的网站,真是老旧 HTML 时代的一个传统,不管技术多么现代,它们似乎都不会消失... :-(