Python之json編碼

1、json
JSON: JavaScript Object Notation(JavaScript 對象表示法)
JSON 是存儲和交換文本信息的語法
一、json輕量級:語法規則
JSON 語法是 JavaScript 對象表示法語法的子集。
(1)數據在名稱/值對中
(2)數據由逗號分隔
(3)一個花括號表示一個對象
(4)[]數組,能夠存放多個對象
(5)字符串使用雙引號
 
2、Python類型與json類型轉換
一、把python的數據,轉換爲json格式
json.dumps(data,sort_keys=True,indent=4,separators=(',',':'),skipkeys=True,ensure_ascII=False)
sort_keys默認是false。是否按字典排序(a到z)輸出:True(按字典排序)
indent:每一個value對前面空4格顯示
separators:使用制定的字符替換,參數的做用是去掉逗號「,」和分號「:」後面的空格
skipkeys:把有錯誤的數據忽略掉
ensure_ascii:默認是True:字符以外的顯示爲\u4e2d\u56fd
 
二、json解碼:把json格式,轉換成爲python格式
json.loads()
json的object類型-----Python的dict類型
json的array類型------Python的list類型
 
import json
data = [{'a':'A','b':(2,4),'c':3.0,'d':None,'e':True}]
print data
dataJson = json.dumps(data,sort_keys=True,separators=(',',':'),indent=4,skipkeys=True)
print dataJson
 
print json.loads(dataJson)
 
三、編碼過程當中,Python中的list和tuple都被轉化成json的數組,而解碼後,json的數組最終被轉化成Python的list的,不管是原來是list仍是tuple。
 
3、序列化和反序列化
一、把python的類對象轉換爲json格式:使用dumps()函數中的default參數
import json
class Employee(object):
def __init__(self,name,age,sex,tel):
self.name = name
self.age = age
self.sex = sex
self.tel = tel
# 將序列化函數定義到類裏面
def objJson(self):
return {
'name':self.name,
'age':self.age,
'sex':self.sex,
'tel':self.tel
}
 
e1 = Employee('andy','24','male','131xxxxxxxx')
print json.dumps(e1,default=e1.objJson)
 
#另外一個更簡單的方法
e1=Employee('andy','24','male','131xxxxxxxx')
# print json.dumps(e1,default=e1.objJson)
print json.dumps(e1.__dict__)
一般class及其實例都會有一個__dict__屬性(除非類中添加了__slots__屬性),它是一個dict類型,
存儲的是類或類實例中有效的屬性。
 
二、Json反序列化爲類對象
json串反序列化成類對象或類的實例,使用的是loads()方法中的object_hook參數來實現。
json.loads(data,object_hook=jsonToClass)
 
class Employee(object):
def __init__(self,name,age,sex,tel):
self.name = name
self.age = age
self.sex = sex
self.tel = tel
def objJson(self,obj_instance):
return {
'name':obj_instance.name,
'age':obj_instance.age,
'sex':obj_instance.sex,
'tel':obj_instance.tel
}
 
e1 = Employee('andy','24','male','131xxxxxxxx')
print json.dumps(e1.__dict__)
#fucn(e1)
print e1.__dict__
 
def jsonToClass(dictVar):
return Employee(dictVar['name'],dictVar['age'],dictVar['sex'],dictVar['tel'])
jsonDate = {"age": "24", "tel": "131xxxxxxxx", "name": "andy", "sex": "male"}
e = json.loads(jsonDate,object_hook=jsonToClass)
print e
print e.name
 
4、
Python類型                 JSON字符串類型
dict                             object
list, tuple                    array
str, unicode               string
int, long, float            number
True                          true
False                        false
None                        null
相關文章
相關標籤/搜索