如何正确编写从单独的json文件中读取密钥的python函数



我正在编写一个python脚本,该脚本将读取json并查找特定的键。到目前为止,如果我将json值作为一个变量包括在内,我就可以让它工作了。但是,我的最终目标是从文件中读取json值。这是我一直在研究的代码:

import jwt
import os
jwks = {
"keys": [
{
"kty": "RSA",
"use": "sig",
"kid": "123456ABCDEF",
"x5t": "123456ABCDEF",
"n": "qa9f6h6h52XbX0iAgxKgEDlRpbJw",
"e": "AQAB",
"x5c": [
"43aw7PQjxt4/MpfNMS2BfZ5F8GVSVG7qNb352cLLeJg5rc398Z"
]
},
{
"kty": "RSA",
"use": "sig",
"kid": "987654ghijklmnoP",
"x5t": "987654ghijklmnoP",
"n": "qa9f6h6h52XbX0iAgxKgEDlRpbJw",
"e": "AQAB",
"x5c": [
"1234R46Qjxt4/MpfNMS2BfZ5F8GVSVG7qNb352cLLeJg5rc398Z"
]
} 
]
}

class InvalidAuthorizationToken(Exception):
def __init__(self, details):
super().__init__('Invalid authorization token: ' + details)

def get_jwk(kid):
for jwk in jwks.get('keys'):
if jwk.get('kid') == kid:
print ('This is jwk:', jwk)
return jwk
raise InvalidAuthorizationToken('kid not recognized')

#Execute
get_jwk('123456ABCDEF')
get_jwk('987654ghijklmnoP')

在这里,我试图做的是替换那些相同的值,并将它们存储在一个单独的文件(jwks键(中,并将其作为变量读入。然而,我犯了以下错误,不明白我做了什么。如何正确构造此函数?

这是追踪:

Traceback (most recent call last):
File "printjwks2.py", line 59, in <module>
get_jwk('123456ABCDEF')
File "printjwks2.py", line 51, in get_jwk
for jwk in jwks.get('keys'):
AttributeError: 'str' object has no attribute 'get'

功能如下:

def get_jwk(kid):
with open('testkeys/jwks-keys', 'r') as az:
jwks = az.read()
for jwk in jwks.get('keys'):
if jwk.get('kid') == kid:
print (jwk)
return jwk
raise InvalidAuthorizationToken('kid not recognized')
with open('testkeys/jwks-keys', 'r') as az:
jwks = az.read()

这里jwks只是一个字符串对象,因为az.read()将其作为字符串返回。因此,在应用jwks.get('keys')之前,必须将JSON数据反序列化为python对象。

>>> sample_json = '{"json_key": "json_value"}'
>>> sample_json.get("json_key")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'get'
>>> import json
>>> json.loads(sample_json).get("json_key")
'json_value'

由于您正在从文件中读取JSON,因此可以使用json.loadfp(.read((-支持文本文件或包含JSON文档的二进制文件(反序列化为Python对象

>>> import json
>>> with open('testkeys/jwks-keys', 'r') as az:
...    jwks = json.load(az)

最新更新