日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python: Json串反序列化为自定义类对象

發布時間:2024/9/30 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python: Json串反序列化为自定义类对象 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近剛接觸到python,就想到了如何反序列化json串。網上找了一下,大部分都是用json模塊反序列化為python數據結構(字典和列表)。如果對json模塊不了解的參考菜鳥教程。然后我在此基礎上將python數據轉換為了自定義類對象。
下面是測試代碼及運行結果:

import Json.JsonToolclass Score:math = 0chinese = 0class Book:name = ''type = ''class Student:id = ''name = ''score = Score()books = [Book()]student = Student()json_data = '{"id":"123", "name":"kid", "score":{"math":100, "chinese":98}, ' \'"books":[{"name":"math", "type":"study"}, ' \'{"name":"The Little Prince", "type":"literature"}]} ' Json.JsonTool.json_deserialize(json_data, student)print(student.name) print(student.score.math) print(student.books[1].name)input("\n按回車鍵退出。")

運行結果:

kid100The Little Prince按回車鍵退出。

實現代碼如下:

import jsondef json_deserialize(json_data, obj):py_data = json.loads(json_data)dic2class(py_data, obj)def dic2class(py_data, obj):for name in [name for name in dir(obj) if not name.startswith('_')]:if name not in py_data:setattr(obj, name, None)else:value = getattr(obj, name)setattr(obj, name, set_value(value, py_data[name]))def set_value(value, py_data):if str(type(value)).__contains__('.'):# value 為自定義類dic2class(py_data, value)elif str(type(value)) == "<class 'list'>":# value為列表if value.__len__() == 0:# value列表中沒有元素,無法確認類型value = py_dataelse:# value列表中有元素,以第一個元素類型為準child_value_type = type(value[0])value.clear()for child_py_data in py_data:child_value = child_value_type()child_value = set_value(child_value, child_py_data)value.append(child_value)else:value = py_datareturn value 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Python: Json串反序列化为自定义类对象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。