使用python请求从响应解析JSON

使用python请求从响应解析JSON,python,json,python-requests,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 = '

我正在尝试解析响应中的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不起作用

试试类似的方法

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'}]
试试像这样的东西

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'}]

这里有一个看起来很可怕的单行程序,它会将json从特定响应中拉出来并放入dict中

d = json.loads(r.text.split("=")[1].replace("'", '"')[:-1])
它从javascript语句中提取json本身,用双引号替换单引号(因为json模块不接受单引号),然后将json模块提供给它

Edit正如Hugh Bothwell所指出的,使用
ast.literal_eval
而不是json模块避免了单引号问题,因此您只需要

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

.strip(;”
将剥离“;”结尾和开头的空格。

这里有一个看起来很可怕的单行线,它将把json从特定的响应中拉出来,放到dict中

d = json.loads(r.text.split("=")[1].replace("'", '"')[:-1])
它从javascript语句中提取json本身,用双引号替换单引号(因为json模块不接受单引号),然后将json模块提供给它

Edit正如Hugh Bothwell所指出的,使用
ast.literal_eval
而不是json模块避免了单引号问题,因此您只需要

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

.strip(;”
将剥离“;”结束和开始的空白。

您得到的不是json。这是javascript。@Leonardo这只是语义,我如何解析它。这实际上是@Leonardo.Z所做的一个重要区别;您必须将Javascript转换为有效的JSON,这可能是一个可行的长期选项,也可能不是。您得到的不是JSON。这是javascript。@Leonardo这只是语义,我如何解析它。这实际上是@Leonardo.Z所做的一个重要区别;您必须将Javascript转换为有效的JSON,这可能是一个可行的长期选项,也可能不是。很高兴再次见到您。“19”应该是所有字符,直到正方形背景?是的,并且:-1来修剪结尾的“;”。很高兴再次见到你。“19”应该是所有字符,直到方形背景?是的,并且:-1将“;”从末尾删除。(因为json模块不接受单引号)这是因为json不接受单引号为:)(因为json模块不接受单引号)这是因为json不接受单引号为:)