
现在有一个 1400 字节的二进制数据的 list,形式类似[[b']', b'Y', b']', b'Y', b'\'],直接使用 josn.dumps()的话会提示 TypeError: b'' is not JSON serializable,list 不能使用 decode 和 encode,而使用 bytes()和 str()又会破坏原来的字节长度变成 10000 多字节了,而且原本分开的两个字节会黏连成一个 utf-8 字符,请问如何在不改变字节长度的情况下将该 list 放入 json 的载荷呢?
1 registerrr 2019 年 5 月 19 日 b 是用来标识 byte 的意思吗? JSON 的 value 存储的类型只有 string,number,object,array,true,false,null 这几种,具体参考 json.org 。并不能直接直接存二进制。两种思路 1.按 number 存,存对应的 ASCII 码; 2.按字符串存 |
2 vitovan 2019 年 5 月 19 日 [载荷] 是什么? 是说怎么把 `[[b']', b'Y', b']', b'Y', b'\']` 这玩意儿转成 JSON 格式吗? |
3 smdbh 2019 年 5 月 19 日 b64 一下啊 |
4 si 2019 年 5 月 19 日 一般要保存二进制数据就是存 base64 字符串,缺点就是会长三分之一。 |
5 xpresslink 2019 年 5 月 19 日 楼主问题描述有问题。 一个 1400 字节的二进制数据的 list,形式类似[[b']', b'Y', b']', b'Y', b'\'] [[b']', b'Y', b']', b'Y', b'\'] 这个是个 bytes 组成的 list,并不是二进制数据。 在 pyton 中二进制数据是长成下面这样的。 [0b1110, 0b10, 0b11, 0b1011101] |
6 cz5424 2019 年 5 月 20 日 via iPhone 存 ASCII 码,输出转换 |
7 v2et OP @registerrr 按字符串存会变成 utf 编码,然后有些原来两个相邻的字节就变成一个 utf 字符了。不便于后续处理 |
10 v2et OP @xpresslink 确实说错了,主要这个原来是示波器读取的二进制波形数据,但是在 python 的函数里变成 bytes 的 list 了,然后固有印象就说错了 |
11 wwwjfy 2019 年 5 月 20 日 常用做法是 base64 ''.join() 就是 bytes 了,就可以 base64 了 |
12 Cooky 2019 年 5 月 20 日 via Android 自己写一个 JSON 的转换函数,手册里有 |
13 locoz 2019 年 5 月 20 日 如果一定要直接用 json 存的话,base64 吧,最好是把这个 list 变成整个 bytes 再处理,会方便一些。不过这种其实用 protobuf 之类的会方便很多啊 |
14 Qzier 2019 年 5 月 20 日 先合并成一个 bytes,然后在 base64 转成字符串。 |