首页 > 解决方案 > 将 json 文件编码为字节

问题描述

我想将我的 json 文件编码为字节。

我正在使用提供大量数据的传感器。现在我正在做的是获取每个值,使用将其转换为字节struct.pack(),堆叠数据并最终发送。

例如,如果我有:

{
    'Temperature':9999,
    'Ph': 8888,
    'WindDir': 7777,
    ...
}

我在想,可能存在一些函数、算法、NN 等可以直接将此 dict 转换为二进制,并且显然是一个解码器。

这个想法是做类似的事情,struct.pack(myFile.json).

我认为这很有趣,因为如果可能的话,我不仅可以处理数字,也可以处理字符串,并将数据作为典型的 API 响应发送。

注意:它是以字节为单位的强制性工作。

标签: pythonjson

解决方案


只要您的内容dict仅限于内置 python 类型,您就可以毫不费力地使用pickle内置模块。

创建文件如下:

import pickle
d = {"a":1,"b":"two","c":3.5}
with open("data.p","wb") as f:
    pickle.dump(d, f)

从该文件中读取如下:

import pickle
with open("data.p","rb") as f:
    d = pickle.load(f)
print(d)  # {'a': 1, 'b': 'two', 'c': 3.5}

创建bytes如下:

import pickle
d = {"a":1,"b":"two","c":3.5}
databytes = pickle.dumps(d)
print(databytes)  # b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02X\x03\x00\x00\x00twoq\x03X\x01\x00\x00\x00cq\x04G@\x0c\x00\x00\x00\x00\x00\x00u.'

bytes法如下:

import pickle
databytes = b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02X\x03\x00\x00\x00twoq\x03X\x01\x00\x00\x00cq\x04G@\x0c\x00\x00\x00\x00\x00\x00u.'
d = pickle.loads(databytes)
print(d)  # {'a': 1, 'b': 'two', 'c': 3.5}

推荐阅读