使用python requests解析响应中的JSON

1 投票
2 回答
921 浏览
提问于 2025-04-18 04:50

我正在尝试从一个响应中提取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'}]

撰写回答