【问题标题】:Error parsing JSON string解析 JSON 字符串时出错
【发布时间】:2012-04-29 02:14:10
【问题描述】:

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

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

【问题讨论】:

  • 你能发布 JSON 响应吗?
  • 你可以通过给它有效的json来摆脱错误,或者忽略失败。需要看json。
  • 我想通过说我们此时不需要查看 json 来更正我的最后一条评论。我查看了 url 并看到了数据,不过如果在这里发布 sn-p 对每个人都很方便。

标签: python json parsing


【解决方案1】:

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

这是另一个关于区别的问题:
What are the differences between JSON and JSONP?

您可以从您的 url 中删除回调参数并返回纯 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',

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

  1. 查看api是否支持json返回值而不是jsonp
  2. 对输出进行正则表达式修复以在解码前引用所有键

【讨论】:

  • 谢谢!我看到它不再包含在函数调用中。但是它仍然不会解析。我得到一个raise JSONDecodeError("Expecting property name", s, end) simplejson.decoder.JSONDecodeError: Expecting property name: line 1 column 1 (char 1) 该网址是返回一个有效的 json 还是我解析不正确?
  • 如果提供回调参数,某些 API(例如 Stripe 的)将返回 JSONP,否则返回 JSON。
猜你喜欢
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 2022-09-27
相关资源
最近更新 更多