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