Python 从HTTP响应解析Json字符串

Python 从HTTP响应解析Json字符串,python,json,Python,Json,我试图用Python解析来自HTTP请求的JSON响应。但我得到了以下例外: ValueError: No JSON object could be decoded Python代码: profile = webdriver.FirefoxProfile() profile.set_preference('network.http.phishy-userpass-length', 255) browser = webdriver.Firefox(firefox_profile=profile

我试图用Python解析来自HTTP请求的JSON响应。但我得到了以下例外:

 ValueError: No JSON object could be decoded
Python代码:

profile = webdriver.FirefoxProfile()
profile.set_preference('network.http.phishy-userpass-length', 255)
browser = webdriver.Firefox(firefox_profile=profile)
browser.get("https://"+username+":"+password+"@"+url)
htmltext= str(browser.page_source)
html=soup(htmltext)
jsondata= str(html.find('pre')).strip('</pre>')
data=json.loads(jsondata)
print data['entries']

我在这里看到了几个问题,但最突出的两个问题是:

  • 您正在使用BeautifulSoup解析页面。如果您真的只接收到发布的类似JSON的文本,BeautifulSoup将无法解析它。即使没有抛出错误,输出也将是某种形式的HTML,而不是JSON

  • 您显示的页面实际上不是有效的JSON。不引用
    应用程序
    用户
    的值

  • 我也有点困惑,为什么要使用硒来获得响应。除非特定页面上正在执行JavaScript(您确实可以使用真正的浏览器来执行JavaScript),否则这看起来就像是在使用推土机来尝试解决问题


    使用标准库工具(
    urllib2
    urllib.request
    ,具体取决于您的Python版本)应该足够了,也许只需要设置几个显式的HTTP头。就我个人而言,我会用这个来完成这样的任务;它甚至带有内置的JSON处理。

    我没有看到您初始化jsondata。
    jsondata
    来自哪里?请注意,您在这里发布的JSON无效;
    应用程序
    用户
    值周围没有引号。您可以使用一个linter来测试某个东西是否是有效的JSON。JSONLint.com提供了一个在线版本。抱歉@MartijnPieters my bad我已经将“html”分配给了“jsondata”。我已经修改了代码,您现在可以检查一下吗。@查兰:您现在正在传入一个BeautifulSoup对象。既然您试图解析JSON,而不是HTML,为什么还要在这里使用BeautifulSoup?实际上,我并没有得到简单的JSON字符串作为响应,而是一个HTML字符串,因此我使用BeautifulSoup来解析它,并找到存储在标记中的JSON。我还没有公布所有这些细节。对不起,没来clear@charan:可能是您的提取方法不正确。可能您正在解析的是JavaScript,而不是严格的JSON。可能是您想要提取的信息可以通过正则表达式等更好地处理。这就是为什么您需要a)明确您真正要解决的问题(而不仅仅是您自己如何解决的问题)和b)给我们一个可复制的样本,以便我们可以尝试并排除故障。您没有给我们任何建议,所以我只能给您一些一般建议。使用Selenium的原因是我访问的URL使用的是自签名证书,因此在使用urllib2库时,它会抛出与SSL相关的异常。谢谢@Martijin,我会记住你的建议的。@charan:urllib2根本不能验证证书,所以它应该可以工作。关于堆栈溢出,有几篇文章解释了如何强制它进行验证。请求也不会验证,除非您告诉它,请参阅。
    {
       "count":1,
       "entries": 
       [
          {
             "id":15862,
             "application":loginAudit,
             "user":charan.kumar@speridian.com,
             "time":"2014-10-30T02:08:14.103-04:00",
             "values":
             {
                     "\/loginAudit\/login\/no-error\/user":"charan.kumar@speridian.com"
             }
    
          }
       ]
    }