Python基礎(chǔ)021--json序列化和反序列化

json序列化和反序列化

  • 查看json庫的所有方法
    • import json ----> print(json.__all__)
  • 序列化可以理解為:把python的對象編碼轉(zhuǎn)換為json格式的字符串
  • 反序列化可以理解為:把json格式字符串解碼為python數(shù)據(jù)對象
  • json的dumps和loads方法--->用于對字符串進(jìn)行操作
    • dumps方法,將python對象編碼成json字符串
    • loads方法,將已編碼的json字符串解碼為python對象
    • 在進(jìn)行反序列化操作的時候,字符串外面的引號必須是單引號,內(nèi)部的引號必須是雙引號;否則會報錯
  • json的dump和load方法--->用于對文件進(jìn)行操作
    • dump是把序列化之后的字符串寫到一個文件中
    • load是從一個一個文件中讀取文件
  • 在序列化是,中文漢字總是被轉(zhuǎn)換為unicode碼,在dumps函數(shù)中添加參數(shù)ensure_ascii=False即可解決
# json的序列化
In [61]: dict2 = {'name':'zzzz','age':33,'address':'鄭州市'}
In [62]: print(type(dict2))
<type 'dict'>
In [63]: print(dict2)
{'age': 33, 'name': 'zzzz', 'address': '\xe9\x83\x91\xe5\xb7\x9e\xe5\xb8\x82'}
In [65]: dict2_xu = json.dumps(dict2,ensure_ascii=False)
In [66]: print(type(dict2_xu))
<type 'str'>
In [67]: print(dict2_xu)
{"age": 33, "name": "zzzz", "address": "鄭州市"}

# json的反序列化
In [10]: #coding:utf-8
In [11]: import json
In [12]: dict3 = {'name':'zzz','age':22,'address':'鄭州市'}
In [13]: print(type(dict3))
<type 'dict'>
In [14]: print(dict3)
{'age': 22, 'name': 'zzz', 'address': '\xe9\x83\x91\xe5\xb7\x9e\xe5\xb8\x82'}
In [15]: dict3_xu = json.dumps(dict3,ensure_ascii=False)
In [16]: print(type(dict3_xu))
<type 'str'>
In [17]: print(dict3_xu)
{"age": 22, "name": "zzz", "address": "鄭州市"}
In [18]: dict3_fan = json.loads(dict3_xu)
In [19]: print(type(dict3_fan))
<type 'dict'>
In [20]: print(dict3_fan)
{u'age': 22, u'name': u'zzz', u'address': u'\u90d1\u5dde\u5e02'}



# 把文件內(nèi)容進(jìn)行序列化和反序列化
# 序列化-->1、先把列表序列化成字符串,然后寫入到文件中再進(jìn)行讀取
In [27]: import json
In [28]: list1 = ['Apple','Hwawei','selenium','java','python']
In [29]: json_xu = json.dumps(list1)
In [30]: type(json_xu)
Out[30]: str
In [31]: file1 = open('./ccc.txt','w+')
In [32]: file1.write(json_xu)
In [33]: file1.tell()
Out[33]: 49
In [34]: file1.seek(0)
In [35]: file1.read()
Out[35]: '["Apple", "Hwawei", "selenium", "java", "python"]'
# 反序列化--->2、先讀取文件中的字符串,然后再反序列成列表
# loads方法中的參數(shù)是string在打開文件時要使用read()方法
In [43]: json_fan = json.loads(open('./ccc.txt','r').read()) 
In [44]: print json_fan
[u'Apple', u'Hwawei', u'selenium', u'java', u'python']
In [45]: type(json_fan)
Out[45]: list
# 反序列化的標(biāo)準(zhǔn)寫法
# load是基于文件操作的方法
In [46]: json_fan = json.load(open('./ccc.txt','r'))
In [47]: type(json_fan)
Out[47]: list


# dump和load對文件進(jìn)行序列化和反序列化                      --->推薦使用對文件的操作方法
In [49]: import json
In [50]: list2 = ['zzzz','aaaa','bbbb']
In [51]: json.dump(list2,open('./aaa.txt','w'))             # 把序列化后的列表寫入文件中
In [52]: json_fan = json.load(open('./aaa.txt','r'))        # 從文件中讀取反序列化后的列表
In [53]: print(json_fan)
[u'zzzz', u'aaaa', u'bbbb']
In [54]: print(type(json_fan))
<type 'list'>

  • json中模塊的區(qū)別
方法 描述
json.dump 基于文件操作的序列方法
json.dumps 基于字符串操作的序列方法,在操作文件的時候沒有讀取功能,要用到read()
json.load 基于文件操作的反序列方法
json.loads 基于字符串操作的反序列方法,在操作文件的時候沒有讀取功能,要用到read()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容