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

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前名称:22文件IO_json_MessagePack-创新互联
URL标题:http://hbruida.cn/article/jeseg.html