0

我在解析似乎是有效 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 字符串。

我需要将这些数据作为单个元素获取。任何想法如何摆脱这个错误?

4

1 回答 1

3

这是一个 jsonp api 网址。它期望返回一个包含在函数调用 xxx() 中的响应。研究如何处理 jsonp。您目前得到的实际上不是有效的 jsonp。它的有效javascript。

这里还有一个关于区别的问题:
JSON 和 JSONP 有什么区别?

您可以从您的 url 中删除回调参数并取回纯 json:
http ://www.rentrent.org/RENT/Ads.aspx?xmin=-118.01925659179687&ymin=33.71948521132481&xmax=-117.68142700195314&ymax=33.85644642218&431&bd=s =-1&type=2&throwErrorIfOverLimit=false

更新

我忽略了从 url 中删除回调参数实际上并没有告诉这个 api 返回 JSON。它只是防止它被包装到一个函数中。返回值仍然不是 json。它是 JavaScript。具体来说,这里是一个例子:

Javascript 从返回值

{Status:'Success',

JSON

{'Status':'Success',

所有的键都需要被引用。您的选择是:

  1. 查看api是否支持json返回值而不是jsonp
  2. 对输出进行正则表达式修复以在解码之前引用所有键
于 2012-04-29T02:22:16.960 回答