?
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到通許網(wǎng)站設(shè)計(jì)與通許網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、申請(qǐng)域名、網(wǎng)頁(yè)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋通許地區(qū)。
json、MessagePack
?
目錄
json:...1
json的數(shù)據(jù)類型:...1
python與json:...3
json模塊:...4
MessagePack:...5
?
?
?
java script object notation,js對(duì)象標(biāo)記,是一種輕量級(jí)的數(shù)據(jù)交換格式,它基于ECMAScript(w3c制定的JS規(guī)范)的一個(gè)子集,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù);
ECMAScript是標(biāo)準(zhǔn),json是實(shí)現(xiàn)的產(chǎn)品,另ES5、ES6是js產(chǎn)品;
?
注:
AJAX,async javascript xml,xml逐步被json取代,AJAX用于前后端傳輸數(shù)據(jù),AJAX是一種在無(wú)需重新加載整個(gè)網(wǎng)頁(yè)的情況下,能夠更新部分網(wǎng)頁(yè)的技術(shù);
chrome中的v8引擎(開(kāi)天辟地的大事);
nodejs,前后端均可用;
?
http://www.w3school.com.cn/index.html?? #web教程
?
?
value值:雙引號(hào)引起來(lái)的字符串,數(shù)值、true、false、null、對(duì)象、數(shù)組,這些都是值;
?
string字符串:由雙引號(hào)包圍起來(lái)的任意字符的組合,可以有轉(zhuǎn)義字符;
?
number數(shù)值:有正負(fù)、有整數(shù)、浮點(diǎn)數(shù);
?
object對(duì)象:
無(wú)序的鍵值對(duì)的集合;
格式:{string1:value1,...stringn:valuen},使用{};
key必須是一個(gè)字符串(而python-dict的key可以為number),需要雙引號(hào)包圍這個(gè)字符串;
value可以是任意合法的值;
?
array數(shù)組:有序的值的集合;
格式:[val1,...valn],使用[];
?
例:
test.json
{
? "person": [
??? {
????? "name": "tom",
????? "age": 18
??? },
??? {
????? "name": "jerry",
????? "age": 16
??? }?? #按嚴(yán)格定義,此處}后不能有逗號(hào),但有些環(huán)境會(huì)自動(dòng)把逗號(hào)去掉
? ],
? "total": 2
}
test2.json
a?? #單個(gè)值也是json
?
注:
https://www.bejson.com/zhuanyi/?? #json壓縮轉(zhuǎn)義
{"person":[{"name":"tom","age":18},{"name":"jerry","age":16}],"total":2}
?
?
python支持少量?jī)?nèi)建數(shù)據(jù)類型到j(luò)son類型的轉(zhuǎn)換;
Python類型 | Json類型 |
True | True |
False | False |
None | Null |
str | string |
int | integer |
float | float |
list | array |
dict | object |
?
?
常用方法:
json.dumps(),在內(nèi)存中操作,py object-->json;
json.loads(),在內(nèi)存中操作,json-->py object;
json.dump(),將json編碼序列化存入文件,py object-->file;
json.load(),從文件讀取數(shù)據(jù),將json編碼反序列化,file-->py object;
?
序列化牽涉到到字符操作、字節(jié)操作、編碼操作,查看dumps源碼;
json是字符編碼;
中文,要注意一個(gè)原則,用什么編碼寫(xiě)的用什么編碼打開(kāi);
?
一般json編碼的數(shù)據(jù)很少落地,數(shù)據(jù)都是通過(guò)網(wǎng)絡(luò)傳輸,傳輸?shù)臅r(shí)候,要考慮壓縮它;
本質(zhì)上來(lái)說(shuō),它就是個(gè)文本,是個(gè)字符串;
json很簡(jiǎn)單,幾乎所有語(yǔ)言編程都支持json,應(yīng)用范圍十分廣泛;
?
例:
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)
注:
運(yùn)行結(jié)果:
{"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())??#序列化方法,方法要自己實(shí)現(xiàn),把要返回的值收集好
Out[9]: '"AA"'
?
?
?
第三方庫(kù);
是一個(gè)基于二進(jìn)制,高效的對(duì)象序列化類庫(kù),可用于跨語(yǔ)言通訊;
它可以像json那樣 ,在許多語(yǔ)言之間交換結(jié)構(gòu)對(duì)象,但它比json更快速也更輕巧;
支持python、ruby、java、c/c++等眾多語(yǔ)言,宣稱比google protocol buffers還要快4倍;
兼容json和pickle;
?
https://msgpack.org/
注:
27bytes-->18bytes
82,A7,C3等均為十六進(jìn)制,跳過(guò)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(),序列化對(duì)象,dumps是用來(lái)兼容json和pickle;
msgpack.unpackb(),同msgpack.loads(),反序列化對(duì)象,loads是用來(lái)兼容json和pickle;
msgpack.pack(),同msgpack.dump(),序列化對(duì)象保存到文件對(duì)象,用dump來(lái)兼容;
msgpack.unpack(),同msgpack.load(),反序列化對(duì)象保存到文件對(duì)象,用load來(lái)兼容;
?
msgpack簡(jiǎn)單易用,高效壓縮,支持語(yǔ)言豐富,用它序列化是一種很好的選擇;
?
例:
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)
注:
運(yùn)行結(jié)果:
<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}
?
長(zhǎng)度print(len(msg))與msgpack.org中Try的結(jié)果對(duì)比:
?
?
文章題目:22文件IO_json_MessagePack
瀏覽路徑:http://jinyejixie.com/article38/gdpjpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、服務(wù)器托管、全網(wǎng)營(yíng)銷推廣、搜索引擎優(yōu)化、做網(wǎng)站、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)