python模塊之json
JSON(JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式。JSON的數據格式其實就是python的字典格式,包含方括號括起來的數組,也就是python裏面的列表。官網:https://docs.python.org/3/library/json.html
在python中,有專門處理json格式的模塊—— json 和 picle模塊
json模塊和picle模塊都有 dumps、dump、loads、load四種方法,而且用法一樣,當然還有其他方法,兩者不同的是:
json模塊序列化出來的是通用格式,其它編程語言都認識,就是普通的字符串,
picle模塊序列化出來的只有python可以認識,其他編程語言不認識的,表現為亂碼
不過picle可以序列化函數,但是其他文件想用該函數,在該文件中需要有該文件的定義(定義和參數必須相同,內容可以不同)
這裏我主要對json介紹
JSON轉換為python對象
JSON |
Python |
object |
dict |
array |
list |
string |
unicode |
number (int) |
int, long |
number (real) |
float |
true |
True |
false |
False |
null |
None |
python對象轉換為JSON
Python |
JSON |
dict |
object |
list, tuple |
array |
str, unicode |
string |
int, long, float |
number |
True |
true |
False |
false |
None |
null |
一、 dumps 和 dump:
dumps和dump序列化方法
dumps:序列化為str,
dump:必須傳文件,將序列化的str保存到文件中
dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw): # 序列號 “obj” 數據類型 轉換為 JSON格式的字符串 dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw): """ 有兩個動作,一個動作是將”obj“轉換為JSON格式的字符串,一個動作是將字符串寫入到文件中,也就是說文件描述符fp是必須要的參數 """
示例代碼:
import json print(json.dumps([])) print(json.dumps(1)) print(json.dumps("1")) dict1 = {1:"one",2:"two",3:"three"} print(json.dumps(dict1)) with open("test.json","w",encoding="utf-8") as f: f.write("this is dumps\n") f.write(json.dumps(dict1,indent=4)) #1使用dumps f.write("\n") f.write("this is dump\n") json.dump(dict1,f,indent=4) #2使用dump,與1效果一致 #格式化:indent=4
執行效果
[]
1
"1"
{"1": "one", "2": "two", "3": "three"}
文件內容:
this is dumps { "1": "one", "2": "two", "3": "three" } this is dump { "1": "one", "2": "two", "3": "three" }
二、 loads 和 load
loads和load 反序列化方法
loads:反序列化,
load :只接收文件描述符,完成了讀取文件和反序列化
loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) """ 將包含str類型的JSON文檔反序列化為一個python對象""" load(fp, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) """將一個包含JSON格式數據的可讀文件飯序列化為一個python對象"""
代碼示例:
import json json_l = json.loads(‘{"1": "one", "2": "two", "3": "three"}‘) print(type(json_l),json_l) json_2 ={"1": "one", "2": "two", "3": "three"} with open("test.json","w",encoding="utf-8") as f: f.write(json.dumps(json_2,indent=4)) #1使用dumps with open("test.json","r",encoding="utf-8") as f: aa= json.loads(f.read()) # 與 json.loads(f.read()) f.seek(0) #將光標移動到起始位置 bb = json.load(f) print(type(aa),aa) print(type(bb),bb)執行結果:
執行結果:
<class ‘dict‘> {‘1‘: ‘one‘, ‘2‘: ‘two‘, ‘3‘: ‘three‘}
<class ‘dict‘> {‘1‘: ‘one‘, ‘2‘: ‘two‘, ‘3‘: ‘three‘}
<class ‘dict‘> {‘1‘: ‘one‘, ‘2‘: ‘two‘, ‘3‘: ‘three‘}
三、encoder 和decoder模塊:
decoder和encoder編碼器和解碼器
json.JSONDecoder([encoding[, object_hook[, parse_float[, parse_int[, parse_constant[, strict[, object_pairs_hook]]]]]]]) json.JSONEncoder([skipkeys[, ensure_ascii[, check_circular[, allow_nan[, sort_keys[, indent[, separators[, encoding[, default]]]]]]]]])
代碼示例:
import json data = [{ ‘a‘ : 1, ‘b‘ : 2, ‘c‘ : 3, ‘d‘ : 4, ‘e‘ : 5 }] json = json.JSONEncoder().encode(data) print (type(json),json)
執行結果:
<class ‘str‘> [{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]
代碼示例:
import json data1 = {1:"one",2:"two",3:"three"} json_string=json.dumps(data1) with open("test1.json","w",encoding="utf-8") as f: #將json_string寫入到文件中 f.write(json.dumps(json_string,indent=4)) with open("test1.json","r",encoding="utf-8") as f2: #讀取json文件 f2.seek(0) aa= json.loads(f2.read()) json2 = json.JSONDecoder().decode(aa) #json print (type(json2),json2)
執行結果:
<class ‘dict‘> {‘1‘: ‘one‘, ‘2‘: ‘two‘, ‘3‘: ‘three‘}
python模塊之json