Python 如何将带有二进制数据的 list 放入 json 载荷? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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

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

  •  
  •   v2et 2019 年 5 月 19 日 4591 次点击
    这是一个创建于 2533 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有一个 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 条回复    2019-05-20 23:56:10 +08:00
    registerrr
        1
    registerrr  
       2019 年 5 月 19 日
    b 是用来标识 byte 的意思吗? JSON 的 value 存储的类型只有 string,number,object,array,true,false,null 这几种,具体参考 json.org 。并不能直接直接存二进制。两种思路 1.按 number 存,存对应的 ASCII 码; 2.按字符串存
    vitovan
        2
    vitovan  
       2019 年 5 月 19 日
    [载荷] 是什么?

    是说怎么把 `[[b']', b'Y', b']', b'Y', b'\']` 这玩意儿转成 JSON 格式吗?
    smdbh
        3
    smdbh  
       2019 年 5 月 19 日
    b64 一下啊
    si
        4
    si  
       2019 年 5 月 19 日
    一般要保存二进制数据就是存 base64 字符串,缺点就是会长三分之一。
    xpresslink
        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]
    cz5424
        6
    cz5424  
       2019 年 5 月 20 日 via iPhone
    存 ASCII 码,输出转换
    v2et
        7
    v2et  
    OP
       2019 年 5 月 20 日
    @registerrr 按字符串存会变成 utf 编码,然后有些原来两个相邻的字节就变成一个 utf 字符了。不便于后续处理
    v2et
        8
    v2et  
    OP
       2019 年 5 月 20 日
    @vitovan 是的,意思差不多
    v2et
        9
    v2et  
    OP
       2019 年 5 月 20 日
    @smdbh
    @si 我试了,列表好像不支持 base64
    v2et
        10
    v2et  
    OP
       2019 年 5 月 20 日
    @xpresslink 确实说错了,主要这个原来是示波器读取的二进制波形数据,但是在 python 的函数里变成 bytes 的 list 了,然后固有印象就说错了
    wwwjfy
        11
    wwwjfy  
       2019 年 5 月 20 日
    常用做法是 base64
    ''.join() 就是 bytes 了,就可以 base64 了
    Cooky
        12
    Cooky  
       2019 年 5 月 20 日 via Android
    自己写一个 JSON 的转换函数,手册里有
    locoz
        13
    locoz  
       2019 年 5 月 20 日
    如果一定要直接用 json 存的话,base64 吧,最好是把这个 list 变成整个 bytes 再处理,会方便一些。不过这种其实用 protobuf 之类的会方便很多啊
    Qzier
        14
    Qzier  
       2019 年 5 月 20 日
    先合并成一个 bytes,然后在 base64 转成字符串。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2794 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 52ms UTC 13:23 PVG 21:23 LAX 06:23 JFK 09:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86