22文件IO_json_MessagePack

 

站在用户的角度思考问题,与客户深入沟通,找到通许网站设计与通许网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站制作、外贸网站建设、企业官网、英文网站、手机端网站、网站推广、申请域名、网页空间、企业邮箱。业务覆盖通许地区。

json、MessagePack

 

目录

json:...1

json的数据类型:...1

python与json:...3

json模块:...4

MessagePack:...5

 

 

 

json:

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

ECMAScript是标准,json是实现的产品,另ES5、ES6是js产品;

 

注:

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

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

nodejs,前后端均可用;

 

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

 

 

json的数据类型:

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

22文件IO_json_MessagePack

 

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

22文件IO_json_MessagePack

 

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

22文件IO_json_MessagePack

 

object对象:

无序的键值对的集合;

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

key必须是一个字符串(而python-dict的key可以为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}

 

 

python与json:

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更快速也更轻巧;

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

兼容json和pickle;

 

https://msgpack.org/

22文件IO_json_MessagePack

注:

27bytes-->18bytes

82,A7,C3等均为十六进制,跳过ascii(0-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是用来兼容json和pickle;

msgpack.unpackb(),同msgpack.loads(),反序列化对象,loads是用来兼容json和pickle;

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.org中Try的结果对比:

22文件IO_json_MessagePack

 

 


当前标题:22文件IO_json_MessagePack
文章分享:http://ybzwz.com/article/gdpjpp.html