使用python requests解析响应中的JSON
我正在尝试从一个响应中提取JSON数据:
如果我在浏览器中访问:/url/gold/stuff/here
我在浏览器中看到的响应是:
window.data_gold = [{'gold':' room 123' } , {'better gold':'room 1234'} , {"best gold": "in cellar"}];
我该如何从这个响应中提取出JSON数据呢?
window.data_gold = json
我的代码是:
import requests,json
url = '/url/gold/stuff/here'
r = requests.get(url,timeout = 30)
newJSON = r.text
上面的代码返回了所有的文本,.json格式的提取方法不管用。
2 个回答
3
这里有一行看起来很复杂的代码,它可以从特定的响应中提取出json数据,并把它放进一个字典里。
d = json.loads(r.text.split("=")[1].replace("'", '"')[:-1])
这段代码是从一个javascript语句中提取出json数据的,它把单引号替换成双引号(因为json模块不接受单引号),然后把处理后的内容传给json模块。
编辑 正如Hugh Bothwell所指出的,使用ast.literal_eval
代替json模块可以避免单引号的问题,所以你可以用下面的代码:
d = ast.literal_eval(r.text.split("=")[1].strip(" ;"))
这里的.strip(" ;")
是用来去掉末尾的分号和开头的空格的。
3
试试这样做:
data = json.loads(r.text[19:-1])
补充:这样不行,但这个可以:
import ast
data = ast.literal_eval(r.text[19:-1])
这样会得到:
[{'gold': ' room 123'},
{'better gold': 'room 1234'},
{'best gold': 'in cellar'}]