22文件IO_json_MessagePack
admin
2023-07-09 06:24:14
0

 

jsonMessagePack

 

目录

json... 1

json的数据类型:... 1

pythonjson... 3

json模块:... 4

MessagePack... 5

 

 

 

json

java script object notationjs对象标记,是一种轻量级的数据交换格式,它基于ECMAScriptw3c制定的JS规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据;

ECMAScript是标准,json是实现的产品,另ES5ES6js产品;

 

注:

AJAXasync javascript xmlxml逐步被json取代,AJAX用于前后端传输数据,AJAX是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术;

chrome中的v8引擎(开天辟地的大事);

nodejs,前后端均可用;

 

http://www.w3school.com.cn/index.html   #web教程

 

 

json的数据类型:

value值:双引号引起来的字符串,数值、truefalsenull、对象、数组,这些都是值;

22文件IO_json_MessagePack

 

string字符串:由双引号包围起来的任意字符的组合,可以有转义字符;

22文件IO_json_MessagePack

 

number数值:有正负、有整数、浮点数;

22文件IO_json_MessagePack

 

object对象:

无序的键值对的集合;

格式:{string1:value1,...stringn:valuen},使用{}

key必须是一个字符串(而python-dictkey可以为number),需要双引号包围这个字符串;

value可以是任意合法的值;

22文件IO_json_MessagePack

 

array数组:有序的值的集合;

格式:[val1,...valn],使用[]

22文件IO_json_MessagePack

 

例:

test.json

{

  "person": [

    {

      "name": "tom",

      "age": 18

    },

    {

      "name": "jerry",

      "age": 16

    }   #按严格定义,此处}后不能有逗号,但有些环境会自动把逗号去掉

  ],

  "total": 2

}

test2.json

a   #单个值也是json

 

注:

https://www.bejson.com/zhuanyi/   #json压缩转义

{"person":[{"name":"tom","age":18},{"name":"jerry","age":16}],"total":2}

 

 

pythonjson

python支持少量内建数据类型到json类型的转换;

Python类型

Json类型

True

True

False

False

None

Null

str

string

int

integer

float

float

list

array

dict

object

 

 

json模块:

常用方法:

json.dumps(),在内存中操作,py object-->json

json.loads(),在内存中操作,json-->py object

json.dump(),将json编码序列化存入文件,py object-->file

json.load(),从文件读取数据,将json编码反序列化,file-->py object

 

序列化牵涉到到字符操作、字节操作、编码操作,查看dumps源码;

json是字符编码;

中文,要注意一个原则,用什么编码写的用什么编码打开;

 

一般json编码的数据很少落地,数据都是通过网络传输,传输的时候,要考虑压缩它;

本质上来说,它就是个文本,是个字符串;

json很简单,几乎所有语言编程都支持json,应用范围十分广泛;

 

例:

import json

 

d = {'name':'tom','age':18,'interest':['music','movie'],'test':True,'test2':None}

j = json.dumps(d)

print(j)

 

d1 = json.loads(j)

print(d1)

注:

运行结果:

{"name": "tom", "age": 18, "interest": ["music", "movie"], "test": true, "test2": null}

{'name': 'tom', 'age': 18, 'interest': ['music', 'movie'], 'test': True, 'test2': None}

 

例:

In [6]: class AA:

   ...:     pass

   ...:

In [7]: json.dumps(AA())   #不可序列化

---------------------------------------------------------------------------

TypeError            

……

TypeError: <__main__.AA object at 0x7f8cf9f84978> is not JSON serializable

In [8]: class AA:

   ...:     def ser(self):

   ...:         return 'AA'

   ...:    

In [9]: json.dumps(AA().ser())   #序列化方法,方法要自己实现,把要返回的值收集好

Out[9]: '"AA"'

 

 

 

MessagePack

第三方库;

是一个基于二进制,高效的对象序列化类库,可用于跨语言通讯;

它可以像json那样 ,在许多语言之间交换结构对象,但它比json更快速也更轻巧;

支持pythonrubyjavac/c++等众多语言,宣称比google protocol buffers还要快4倍;

兼容jsonpickle

 

https://msgpack.org/

22文件IO_json_MessagePack

注:

27bytes-->18bytes

82,A7,C3等均为十六进制,跳过ascii0-127);

 

]$ pip install msgpack-python

Collecting msgpack-python

  Downloading https://mirrors.aliyun.com/pypi/packages/8a/20/6eca772d1a5830336f84aca1d8198e5a3f4715cd1c7fc36d3cc7f7185091/msgpack-python-0.5.6.tar.gz (138kB)

……

 

常用方法:

import msgpack

msgpack.packb(),同msgpack.dumps(),序列化对象,dumps是用来兼容jsonpickle

msgpack.unpackb(),同msgpack.loads(),反序列化对象,loads是用来兼容jsonpickle

msgpack.pack(),同msgpack.dump(),序列化对象保存到文件对象,用dump来兼容;

msgpack.unpack(),同msgpack.load(),反序列化对象保存到文件对象,用load来兼容;

 

msgpack简单易用,高效压缩,支持语言丰富,用它序列化是一种很好的选择;

 

例:

import msgpack

import json

 

js = '{"person":[{"name":"tom","age":18},{"name":"jerry","age":16}],"total":2}'

 

d = json.loads(js)

print(type(d))

print(d)

print()

 

msg = msgpack.dumps(d)

print(type(msg))

print(len(msg))

print(msg)

print()

 

bts = msgpack.loads(msg,encoding='utf-8')

print(type(bts))

print(bts)

注:

运行结果:

{'person': [{'name': 'tom', 'age': 18}, {'name': 'jerry', 'age': 16}], 'total': 2}

 

48

b'\x82\xa6person\x92\x82\xa4name\xa3tom\xa3age\x12\x82\xa4name\xa5jerry\xa3age\x10\xa5total\x02'

 

{'person': [{'name': 'tom', 'age': 18}, {'name': 'jerry', 'age': 16}], 'total': 2}

 

长度print(len(msg))msgpack.orgTry的结果对比:

22文件IO_json_MessagePack

 

 


相关内容

热门资讯

美前副总统:共和党失去了方向,... 2026年是美国的中期选举年,共和党选情不利,可能在年底的选举中遭遇挫败。美国前副总统彭斯5月31日...
南枝原来去过中国?《给阿嬷的情... 《给阿嬷的情书》票房口碑双丰收,目前票房已突破13亿。凤凰卫视最新一期《问答神州》专访了该片导演蓝鸿...
法国海军扣押一艘俄“影子舰队”... 近日,法国海军在大西洋海域扣押了一艘据称从俄罗斯摩尔曼斯克出发的油轮,引发俄方强烈不满。俄新社6月1...
凤凰晚报丨面粉染头模仿黄仁勋,... 今日人物【面粉染头模仿黄仁勋,农村青年走红后称遭“法务”警告】“先赔偿5000元肖像侵权使用费,再删...
亲特朗普极右派候选人领跑哥伦比... 【文/观察者网 熊超然】当地时间5月31日,哥伦比亚总统选举拉开帷幕,首轮投票计票工作已完成逾99%...
2026年度网络举报系列宣传活... 5月28日至29日,以“每一件举报,都是共治的力量——豫你e行 同心护网”为主题的2026年度网络举...
中原首例帝企鹅DNA性别鉴定!... 近日,郑州海昌海洋公园正式对外公布中原首对人工繁育的帝企鹅萌宝的DNA性别鉴定报告。这是中原首个将 ...
我国科学家为细胞信号“导航”开... 新华社济南5月31日电(记者张力元)人体细胞犹如一座精密的通信城市,每天都有大量“指令”穿梭传递,调...
极端大风突袭哈尔滨!过山车停摆... 极目新闻记者 詹钘5月31日,受强对流天气影响,哈尔滨国际会展中心体育场相关设施受到损坏,原计划当晚...
三原电缆取得电缆接头连接用防护... 国家知识产权局信息显示,上海三原电缆附件有限公司取得一项名为“一种电缆接头连接用防护结构”的专利,授...