如前所述,您的命令行令牌在解码时返回
json
对象:
{'nested': '[{name=me,', 'id': '1}]'}
快速潜入水中
__main__.py
属于
jwt
... snipped
def encode_payload(args):
# Try to encode
if args.key is None:
raise ValueError('Key is required when encoding. See --help for usage.')
# Build payload object to encode
payload = {}
for arg in args.payload:
k, v = arg.split('=', 1)
... some additional handling on v for time, int, float and True/False/None
... snipped
如您所见,有效负载的键和值直接基于
split('=', 1)
=
总之,
嵌套的
dict
不支持CLI中的
.
-
直接从Python的CLI运行一个即兴语句,如下所示:
> python -c "import jwt; print(jwt.encode({'nested':[{'name':'me', 'id':'1'}]}, 'secret').decode('utf-8'))"
# eyJ...Zq_k
不太理想,但它能满足你的需要。
-
import sys, jwt
my_json = sys.argv[0]
token = jwt.encode(eval(my_json), 'secret')
print(token.decode('utf-8'))
# run in CLI
> python my_encode.py "{'nested':[{'name':'me', 'id':'1'}]}"
# eyJ...Zq_k
注意使用
eval()
这里是
不理想
argv
他更小心了。
-
可以
尝试修改
Lib\site-packages\jwt\__main__.py
在增加官方支持之前,根据您的需要发挥作用(风险自负)。我要提醒您,在考虑修改主代码之前,您应该对编写自己的解析相当满意。在我意识到你将遇到的限制之前,我试了几次:
encode()
方法不考虑
list
作为一个有效的JSON对象(但它应该)。所以一开始你就有一个
口述
就像要操纵的弦。
int
或
float
如果可能的话。你需要以某种方式摆脱它,或者完全改变它处理数字的方式。
我的尝试是这样的:
def func(result, payload):
for arg in payload:
k, v = arg.split('=', 1)
if v.startswith('{') and v.endswith('}'):
result[k] = func({}, v[1:-1])
else:
... the rest of the existing code
k
,
v
对,我需要进一步处理另一个分隔符
,
列表
s、 可能会变得更混乱。这是绝对可行的,而且效果是立竿见影的,也就是说,CLI直接运行于此
__主\uuuuuuuuuuuy.py
克服这些问题以达到你所需要的可能比必要的更多,这取决于你的技能和舒适度。所以选择你的战斗。。。如果CLI不是绝对必要的,我建议使用
.py
方法。