无法从http请求中提取JSON

时间:2017-01-06 01:20:31

标签: python json

我在从HTTP响应中获取数据时遇到问题。遗憾的是,这种格式会以' \ n'附加到所有键/值对。 JSON说它必须是str而不是" bytes"。

我尝试了一些修复程序,因此我的包含列表可能看起来很奇怪/多余。任何建议将不胜感激。

#!/usr/bin/env python3

import urllib.request
from urllib.request import urlopen
import json
import requests

url = "http://finance.google.com/finance/info?client=ig&q=NASDAQ,AAPL"
response = urlopen(url)
content = response.read()
print(content)

data = json.loads(content)
info = data[0]
print(info)
#got this far - planning to extract "id:" "22144"

3 个答案:

答案 0 :(得分:3)

在使用Python发出请求时,我个人喜欢使用requests库。我发现它更容易使用。

import json
import requests

r = requests.get('http://finance.google.com/finance/info?client=ig&q=NASDAQ,AAPL')
json_obj = json.loads(r.text[4:])

print(json_obj[0].get('id'))

以上解决方案打印:22144

响应数据的头部有几个不必要的字符,这就是为什么我只加载响应的相关(json)部分:r.text[4:]。这就是你最初无法将其加载为json的原因。

答案 1 :(得分:1)

Bytes对象有方法decode(),它将字节转换为字符串。检查浏览器中的响应,似乎在字符串的开头有一些额外的字符需要删除(换行符,后跟两个斜杠:'\ n //')。要跳过decode()方法返回的字符串中的前三个字符,我们在方法调用后添加[3:]

data = json.loads(content.decode()[3:])
print(data[0]['id'])

输出正是您所期望的:

22144

答案 2 :(得分:-1)

  

JSON说它必须是str而不是"字节"。

您的内容为" bytes",您可以按照以下方式执行此操作。

data = json.loads(content.decode())