【发布时间】:2018-06-05 06:56:08
【问题描述】:
我正在尝试在 python 中使用 json.loads()
我得到错误:
JSON 对象必须是 str,而不是 'bytes'
a = {'h': '123', 'w': '12345', 'data': "b'eyJod2lkIjpwomfcwpvepovnepovqrepniLLKJAMSNDMSNDMAWEFMOEDAad='"}
a.update(json.loads(base64.b64decode(a['data'])))
这里 a 的“数据”部分被加载为带有 b64 编码的 json 转储。
'data':base64.b64encode(json.dumps(test).encode()); where test = some string eg('epovqrepniLLKJAMSNDMSNDMAWEFMOEDAad=')
我尝试过使用:
a.update(json.loads(base64.b64decode(a['data']).decode('utf-8')))
给我一个 'utf-8' 编解码器无法解码位置字节:无效的继续字节
我也尝试过使用 decodebytes 而不是 b64decode 无济于事。
非常感谢任何帮助!
【问题讨论】:
-
你不需要json.loads(data=a) 因为它已经是一个python dict,你只需要直接输出这个dict。从 dict 输出 json 字符串是 json.dumps() 的工作
-
data值看起来很损坏。你知道"b'eyJ...在用 JSON 和 B64 编码之前是什么吗?通过删除外部引号并将b64decode应用于字节字符串b'eyJ...',我得到了开头看起来像JSON(b'{"hwid":)的东西,但其余部分显然不是有效的JSON。 -
@lenz 你是对的,这些是虚拟值。实际编码数据是有效的。我需要能够删除字典中的外引号。然而,我无法使用 json,即使我使用了 b64decode
-
请显示一些实际(可能是缩写)值,以便测试恢复策略。
-
@lenz 道歉。有敏感数据,我不能放在这里。
标签: python json utf-8 base64 decoding