温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

22文件IO_json_MessagePack

发布时间:2020-07-21 11:19:58 来源:网络 阅读:279 作者:chaijowin 栏目:编程语言

 

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)

注:

运行结果:

<class 'dict'>

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

 

<class 'bytes'>

48

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

 

<class 'dict'>

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

 

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

22文件IO_json_MessagePack

 

 


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI