在base64中提取要解码的Json文件

2024-10-03 23:22:46 发布

您现在位置:Python中文网/ 问答频道 /正文

关于尊重, 我使用一个用base64编码的json文件的内容。 我想解码json文件的编码部分。下面是我的代码。在

response={"response": [{"objcontent": [{"rowkeys":["time","lat","lon","tos"],"rowvalues": [["AAAAAAAALkA=","AAAAAADgU8A=","AAAAAAAA8D8=","7HitYA"],["AAAAAAAALkA=","AAAAAADgU8A=","AAAAAAAACEA=","7HitYA"],["AAAAAAAALkA=","AAAAAADgU8A=","AAAAAAAAFEA=","7HitYA"]]}]}]}

import base64
import struct
for response_i in response['response']:
    a=base64.b64decode(response_i['objcontent'][0]['rowvalues'])
    struct.unpack('12d',a)

以下是我得到的错误。在

^{pr2}$

有人能给你一些克服这个问题的建议。 谢谢您。在


Tags: 文件代码importjson内容编码response解码
3条回答

您正在传递整个列表,该列表本身包含更多列表:

>>> response_i['objcontent'][0]['rowvalues']
[['AAAAAAAALkA=', 'AAAAAADgU8A=', 'AAAAAAAA8D8=', '7HitYA'], ['AAAAAAAALkA=', 'AAAAAADgU8A=', 'AAAAAAAACEA=', '7HitYA'], ['AAAAAAAALkA=', 'AAAAAADgU8A=', 'AAAAAAAAFEA=', '7HitYA']]

您需要解码每个单独的条目,而不是整个列表:

^{pr2}$

注意,I忽略了行中的最后一个值,它不是Base64值。在

下一个问题是Base64数据没有足够的字节来保存12个浮点值(每个8个字节,所以需要96个字节)。由于每个字符串的8个字节,因此每个字符串中可能只有一个浮点值。在

所以你只需要解码一个浮点数:

floating_point_value = struct.unpack('d', decoded)[0]

演示:

>>> for response_i in response['response']:
...     for row in response_i['objcontent'][0]['rowvalues']:
...         for encoded_obj in row[:-1]:
...             decoded = base64.b64decode(encoded_obj)
...             print(struct.unpack('d', decoded)[0])
...
15.0
-79.5
1.0
15.0
-79.5
3.0
15.0
-79.5
5.0

这将执行base64解码解包结构对我来说失败了。在

import base64
import struct

response = {
    "response": [{
        "objcontent": [{
            "rowkeys": ["time", "lat", "lon", "tos"],
            "rowvalues": [
                ["AAAAAAAALkA=", "AAAAAADgU8A=", "AAAAAAAA8D8=", "7HitYA"],
                ["AAAAAAAALkA=", "AAAAAADgU8A=", "AAAAAAAACEA=", "7HitYA"],
                ["AAAAAAAALkA=", "AAAAAADgU8A=", "AAAAAAAAFEA=", "7HitYA"]
            ]
        }]
    }]
}


for response_i in response['response']:
    for r in response_i['objcontent'][0]['rowvalues']:
        for item in r[:-1]: # last item doesnt seem to be be base64 encoded !
            a = base64.b64decode(item)
            print a
            # .... whatever ... struct.unpack('12d',a)

您的json格式似乎不正确,有更多的打开[而不是关闭]。所以我不能给你一个确切的分类。在

在任何情况下,与键“rowvalues”匹配的值是列表[[],[],[]]的列表。因此,您需要对其进行相应的分解,以便将正确的值传递给解码器

for value_list in response_i['objcontent'][0]['rowvalues']:
    for value in value_list:
        # enter your decode code here

相关问题 更多 >