1. 程式人生 > >python模塊之json

python模塊之json

光標 認識 格式 lsp cin doc ascii string 文件

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