如何将 json 数据转换为 python 对象 - Flask
How to translate json data to python object - Flask
我正在尝试使用 OAuthlib 做一个 Web 应用程序以使用 google 登录,这就是 google 对象的样子:
google = oauth.remote_app('google',
request_token_url=None,
access_token_method='POST',
request_token_params={'scope': 'email'},
access_token_url='https://accounts.google.com/o/oauth2/token',
authorize_url='https://accounts.google.com/o/oauth2/auth',
consumer_key="my consumer",
consumer_secret="my secret",
base_url='https://www.googleapis.com/oauth2/v1/'
)
我遇到的问题是当我从 google 获取用户信息时,他是我的授权视图:
@app.route('/login/authorized/<provider>')
def authorized():
resp = google.authorized_response()
auth_error(resp)
id_token = json.load(resp['id_token'])
login_user(me, True)
return redirect(url_for('index'))
所以,我尝试用 json.load 来解码 google 给我的信息,在这种特殊情况下,响应有一个 id_token,它很长string,根据我的研究,它是一个 json 编码的字符串,当它被解码时,提供所有用户信息,无论我尝试多少我似乎都无法找到正确的解码方式,我得到的错误是:
AttributeError: 'unicode' object has no attribute 'read'
在 json.load 行。
编辑:在解码 id_token 之后,我将使用它在我自己的数据库中获取或创建用户。
我正在使用 Flask,库是 json。
如果有人能解释将字符串解码为 python 对象的正确方法,我将不胜感激,或者如果这不是 json 但一些其他类型的编码字符串,请这样做告诉。非常感谢您。
json.load
reads from a file。要解码 JSON 字符串 ,请使用 json.loads
.
然而,根据these docs, id_token
is not JSON, but a "JSON Web Token"。
如果您正在寻找 "payload",您可以尝试:
payload = json.loads( resp['id_token'].split('.')[1].decode('base64') )
正如@this-vidor 所说,我的 id_token 是 JWT 而不是 JSON,我终于能够使用名为 jwt 的库对其进行解码,我使用了 jwt.decode(resp ['id_token'], verify=False) 成功了!只是张贴这个以防万一有人遇到同样的问题并想要解决方案。非常感谢。
有关JWT
的更多信息
我正在尝试使用 OAuthlib 做一个 Web 应用程序以使用 google 登录,这就是 google 对象的样子:
google = oauth.remote_app('google',
request_token_url=None,
access_token_method='POST',
request_token_params={'scope': 'email'},
access_token_url='https://accounts.google.com/o/oauth2/token',
authorize_url='https://accounts.google.com/o/oauth2/auth',
consumer_key="my consumer",
consumer_secret="my secret",
base_url='https://www.googleapis.com/oauth2/v1/'
)
我遇到的问题是当我从 google 获取用户信息时,他是我的授权视图:
@app.route('/login/authorized/<provider>')
def authorized():
resp = google.authorized_response()
auth_error(resp)
id_token = json.load(resp['id_token'])
login_user(me, True)
return redirect(url_for('index'))
所以,我尝试用 json.load 来解码 google 给我的信息,在这种特殊情况下,响应有一个 id_token,它很长string,根据我的研究,它是一个 json 编码的字符串,当它被解码时,提供所有用户信息,无论我尝试多少我似乎都无法找到正确的解码方式,我得到的错误是:
AttributeError: 'unicode' object has no attribute 'read'
在 json.load 行。
编辑:在解码 id_token 之后,我将使用它在我自己的数据库中获取或创建用户。
我正在使用 Flask,库是 json。
如果有人能解释将字符串解码为 python 对象的正确方法,我将不胜感激,或者如果这不是 json 但一些其他类型的编码字符串,请这样做告诉。非常感谢您。
json.load
reads from a file。要解码 JSON 字符串 ,请使用 json.loads
.
然而,根据these docs, id_token
is not JSON, but a "JSON Web Token"。
如果您正在寻找 "payload",您可以尝试:
payload = json.loads( resp['id_token'].split('.')[1].decode('base64') )
正如@this-vidor 所说,我的 id_token 是 JWT 而不是 JSON,我终于能够使用名为 jwt 的库对其进行解码,我使用了 jwt.decode(resp ['id_token'], verify=False) 成功了!只是张贴这个以防万一有人遇到同样的问题并想要解决方案。非常感谢。
有关JWT
的更多信息