使用python请求从响应中解析JSON

时间:2014-04-30 01:56:51

标签: python json python-requests

我正在尝试解析响应中的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 个答案:

答案 0 :(得分: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'}]

答案 1 :(得分:3)

这是一个看起来很丑陋的单行内容,可以将json从特定的响应中拉出来并将其放入dict中。

d = json.loads(r.text.split("=")[1].replace("'", '"')[:-1])

它将json本身从javascript语句中拉出来,用双引号替换单引号(因为json模块不接受单引号),然后将它提供给json模块。

编辑正如Hugh Bothwell所指出的那样,使用ast.literal_eval代替json模块避免了单引号问题,所以你只剩下

d = ast.literal_eval(r.text.split("=")[1].strip(" ;"))

.strip(" ;")将删除';'从头开始和空白。