推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
v2et
V2EX  ›  Python

Python 如何将带有二进制数据的 list 放入 json 载荷?

  •  
  •   v2et · May 19, 2019 · 4676 views
    This topic created in 2578 days ago, the information mentioned may be changed or developed.

    现在有一个 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 的载荷呢?

    14 replies    2019-05-20 23:56:10 +08:00
    registerrr
        1
    registerrr  
       May 19, 2019
    b 是用来标识 byte 的意思吗? JSON 的 value 存储的类型只有 string,number,object,array,true,false,null 这几种,具体参考 json.org 。并不能直接直接存二进制。两种思路 1.按 number 存,存对应的 ASCII 码; 2.按字符串存
    vitovan
        2
    vitovan  
       May 19, 2019
    [载荷] 是什么?

    是说怎么把 `[[b']', b'Y', b']', b'Y', b'\']` 这玩意儿转成 JSON 格式吗?
    smdbh
        3
    smdbh  
       May 19, 2019
    b64 一下啊
    si
        4
    si  
       May 19, 2019
    一般要保存二进制数据就是存 base64 字符串,缺点就是会长三分之一。
    xpresslink
        5
    xpresslink  
       May 19, 2019
    楼主问题描述有问题。
    一个 1400 字节的二进制数据的 list,形式类似[[b']', b'Y', b']', b'Y', b'\']
    [[b']', b'Y', b']', b'Y', b'\'] 这个是个 bytes 组成的 list,并不是二进制数据。
    在 pyton 中二进制数据是长成下面这样的。

    [0b1110, 0b10, 0b11, 0b1011101]
    cz5424
        6
    cz5424  
       May 20, 2019 via iPhone
    存 ASCII 码,输出转换
    v2et
        7
    v2et  
    OP
       May 20, 2019
    @registerrr 按字符串存会变成 utf 编码,然后有些原来两个相邻的字节就变成一个 utf 字符了。不便于后续处理
    v2et
        8
    v2et  
    OP
       May 20, 2019
    @vitovan 是的,意思差不多
    v2et
        9
    v2et  
    OP
       May 20, 2019
    @smdbh
    @si 我试了,列表好像不支持 base64
    v2et
        10
    v2et  
    OP
       May 20, 2019
    @xpresslink 确实说错了,主要这个原来是示波器读取的二进制波形数据,但是在 python 的函数里变成 bytes 的 list 了,然后固有印象就说错了
    wwwjfy
        11
    wwwjfy  
       May 20, 2019
    常用做法是 base64
    ''.join() 就是 bytes 了,就可以 base64 了
    Cooky
        12
    Cooky  
       May 20, 2019 via Android
    自己写一个 JSON 的转换函数,手册里有
    locoz
        13
    locoz  
       May 20, 2019
    如果一定要直接用 json 存的话,base64 吧,最好是把这个 list 变成整个 bytes 再处理,会方便一些。不过这种其实用 protobuf 之类的会方便很多啊
    Qzier
        14
    Qzier  
       May 20, 2019
    先合并成一个 bytes,然后在 base64 转成字符串。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3144 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 14:39 · PVG 22:39 · LAX 07:39 · JFK 10:39
    ♥ Do have faith in what you're doing.