最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python json序列化解讀

 更新時(shí)間:2025年03月18日 08:38:58   作者:jay丿  
這篇文章主要介紹了Python json序列化解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

json 模塊

  • JSON : 是 一種 輕量級(jí)的 數(shù)據(jù)交換格式 、獨(dú)立于編程語(yǔ)言的 數(shù)據(jù)格式。
  • 數(shù)據(jù)格式 簡(jiǎn)單 、清晰。 便于 網(wǎng)絡(luò)間數(shù)據(jù)的傳輸。

json 序列化 基本使用方式

序列化

  • Python中的對(duì)象轉(zhuǎn)成 JSON格式的字符串
import json
ls = [{"name": "張三", "age": 20}, {"name": "李四", "age": 22}]
jsonstr = json.dumps(ls)
print(jsonstr)

dumps 方法中的參數(shù)

  • skipkeys:JSON中 的鍵 只支持 字符串 、數(shù)字、布爾 、null 表示 ,如果 在 python 中 提供了不支持的鍵類型, 則 必須將 skipkeys 設(shè)置為 True
ls = [{"name": "張三", "age": 20, (1,2): 100, None: 1}, {"name": "李四", "age": 22}]
jsonstr = json.dumps(ls, skipkeys=True)
print(jsonstr)
  • ensure_ascii : 對(duì) ascii 之外的數(shù)據(jù) 進(jìn)行 Unicode 編碼 , 如果希望不進(jìn)行編碼,可以設(shè)置為 False
ls = [{"name": "張三", "age": 20, (1,2): 100, None: 1}, {"name": "李四", "age": 22}]
jsonstr = json.dumps(ls, skipkeys=True, ensure_ascii=False)
  • indent: 對(duì) json 進(jìn)行美化, 值是 一個(gè) 數(shù)字 、推薦使用 4
  • allow_nan : 對(duì)序列化的數(shù)據(jù) 是否 支持 非數(shù) float(“nan”) 、 正無(wú)窮 float(“inf”) 、 負(fù)無(wú)窮 float(“-inf”)
  • default : 可以對(duì) 無(wú)法序列化的 對(duì)象 進(jìn)行 特殊處理 (在序列化的時(shí)候,無(wú)法處理的類型 會(huì)觸發(fā) default 函數(shù)的調(diào)用。)
import json

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


if __name__ == '__main__':
 
    p1 = Person(name="張三", age=20)    #  p1.__dict__ :  可以獲取一個(gè)對(duì)象的 字典表示形式。
    p2 = Person(name="李四", age=21)
    p3 = Person(name="王五", age=22)
    p4 = Person(name="趙六", age=20)
    person_list = [p1, p2, p3, p4]
    # 使用 JSON 序列化 將數(shù)據(jù) 轉(zhuǎn)成 JSON字符串
    json_string = json.dumps(person_list, ensure_ascii=False, default=lambda obj: obj.__dict__, indent=2)

    print(json_string)
  • cls : 允許定義一個(gè)類 、該類需要 繼承 json.JSONEncoder ,并重寫 父類 中 default 方法, 解決數(shù)據(jù)無(wú)法序列化的問題。
from datetime import date, datetime

class Person:
    def __init__(self, name, age, birth=None):
        self.name = name
        self.age = age
        self.birth = birth


class JsonEncoder(json.JSONEncoder):
    def default(self, o):
        if hasattr(o, "__dict__"):
            return o.__dict__
        if isinstance(o, date):
            return o.strftime('%Y-%m-%d')

        if isinstance(o, datetime):
            return o.strftime('%Y-%m-%d %H:%M:%S')

        return str(o)


if __name__ == '__main__':
    p1 = Person(name="張三", age=20, birth=date(2000, 10, 10))
    print(p1.__dict__)
    p2 = Person(name="李四", age=21)
    p3 = Person(name="王五", age=22)
    p4 = Person(name="趙六", age=20)
    person_list = [p1, p2, p3, p4]
    # 使用 JSON 序列化 將數(shù)據(jù) 轉(zhuǎn)成 JSON字符串
    json_string = json.dumps(person_list, ensure_ascii=False, cls=JsonEncoder, indent=2)

    print(json_string)
  • loads(string , object_hook=None)
import json
from datetime import date, datetime

# 創(chuàng)建一個(gè) json格式的字符串
string = '[{"name": "張三", "age": 20, "birth": "1990-10-10"}, {"name": "李四", "age": 20, "birth": "1990-10-10"}]'


class Person:
    def __init__(self, name, age, birth=None):
        self.name = name
        self.age = age
        self.birth = birth

    def __repr__(self):
        return str(self.__dict__)


def test(kwargs):
    if "birth" in kwargs:
        kwargs["birth"] = datetime.strptime(kwargs["birth"], '%Y-%m-%d').date()

    return Person(**kwargs)


# 將 該字符串轉(zhuǎn)成列表
ls = json.loads(string, object_hook=test)

print(ls)

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

远安县| 兴安盟| 宁晋县| 桑植县| 杂多县| 衡水市| 紫云| 乌兰察布市| 济宁市| 张家港市| 连云港市| 东丽区| 林甸县| 平凉市| 白玉县| 屯昌县| 霍山县| 竹北市| 白朗县| 濉溪县| 林周县| 辉南县| 余庆县| 出国| 体育| 南召县| 琼结县| 太仆寺旗| 蒙山县| 长兴县| 封丘县| 蒲城县| 香港 | 神木县| 平顶山市| 黄大仙区| 闻喜县| 庆云县| 徐闻县| 若羌县| 临漳县|