提取 Json 文件进行 base64 解码

extract Json file to decode in base64

恕我直言, 我很想使用用 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)

以下是我得到的错误。

TypeError: argument should be a bytes-like object or ASCII string, not 'list'

有人可以提供一些技巧来解决这个问题。 谢谢。

你的json好像格式不对,开[比闭]多。所以我不能给你一个准确的分类。

无论如何,与键 'rowvalues' 匹配的值是列表 [[], [], [] ] 的列表。所以你需要相应地分解它以将正确的值传递给解码器

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

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

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

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

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)

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

您的 next 问题是您的 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 解码,struct.unpack 对我来说失败了。

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)