我在解析看似有效的json的json字符串时遇到了困难。
我的代码如下。我试图从URL中获取一些简单的json。
import urllib2
import simplejson
req = urllib2.Request("http://www.rentrent.org/RENT/Ads.aspx?xmin=-118.01925659179687&ymin=33.71948521132481&xmax=-117.68142700195314&ymax=33.85644642218431&bd=&ba=&pets=-1&type=2&throwErrorIfOverLimit=false&callback=xxx")
opener = urllib2.build_opener()
f = opener.open(req)
content = f.read();
print "content = " + content # Appears to print valid json string
json = simplejson.loads(content)
我在simplejson.loads(content)
上收到错误:
raise JSONDecodeError("No JSON object could be decoded", s, idx)
simplejson.decoder.JSONDecodeError: No JSON object could be decoded: line 1 column 0 (char 0)
这令人困惑,因为content
似乎是一个非常好的json字符串。
我需要将这些数据作为单个元素来获取。任何想法如何摆脱这个错误?
答案 0 :(得分:3)
这是一个jsonp api url。它期望返回一个包含在函数调用xxx()中的响应。看看如何处理jsonp。你目前得到的实际上并不是有效的jsonp。它的有效javascript。
这是另一个有关差异的问题:
What are the differences between JSON and JSONP?
您可以从网址中删除回调参数并返回纯json:
http://www.rentrent.org/RENT/Ads.aspx?xmin=-118.01925659179687&ymin=33.71948521132481&xmax=-117.68142700195314&ymax=33.85644642218431&bd=&ba=&pets=-1&type=2&throwErrorIfOverLimit=false
更新
我忽略了从url中删除回调参数实际上并没有告诉这个api返回JSON。它只能阻止它被包装成一个函数。返回值仍然不是json。这是javascript。具体来说,这是一个例子:
Javascript从返回值
{Status:'Success',
JSON
{'Status':'Success',
需要引用所有密钥。您的选择是: