Python: Json串反序列化为自定义类对象
最近刚接触到python,就想到了如何反序列化json串。网上找了一下,大部分都是用json模块反序列化为python数据结构(字典和列表)。如果对json模块不了解的参考菜鸟教程。然后我在此基础上将python数据转换为了自定义类对象。
下面是测试代码及运行结果:
import Json.JsonTool class Score:
math = 0
chinese = 0 class 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按回车键退出。")
运行结果:
kid
100
The Little Prince 按回车键退出。
实现代码如下:
import json def 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_data
else:
# 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_data
return value
Python: Json串反序列化为自定义类对象的更多相关文章
- 类对象序列化为json串,json串反序列化为类对象
1.类对象序列化为json串: 方法一: class P(object): def __init__(self,name,age,sex): self.name=name self.age=age s ...
- [K/3Cloud]将JSON字符串反序列化为C#动态对象
using Kingdee.BOS.Util; string errString="{/"Row/":1,/"PageId/":/"1234 ...
- Python: 自定义类对象序列化为Json串
之前已经实现了Python: Json串反序列化为自定义类对象,这次来实现了Json的序列化. 测试代码和结果如下: import Json.JsonTool class Score: math = ...
- 将JSON字符串反序列化为指定的.NET对象类型
目录导航: 前言: 方法一.在项目中定义对应的对象参数模型,用于映射反序列化出来的参数(复杂JSON字符串数据推荐使用): 方法二.直接将JSON字符串格式数据反序列化转化为字典数据(简单JSON字符 ...
- C# Json数据反序列化为Dictionary并根据关键字获取指定值1
Json数据: { "dataSet": { "header": { "returnCode": "0", " ...
- C# Json数据反序列化为Dictionary并根据关键字获取指定值
Json数据: { "dataSet": { "header": { "returnCode": "0", " ...
- 将Dictionary序列化为json数据 、json数据反序列化为Dictionary
需要引用System.Web.Extensions dll类库 /// <summary> /// 将json数据反序列化为Dictionary /// </summary> ...
- C#:Json数据反序列化为Dictionary并根据关键字获取指定的值
转自曾是土木人原文 C#:Json数据反序列化为Dictionary并根据关键字获取指定的值 Json数据: { "dataSet": { "header": ...
- Gson把json串转换成java实体对象
Gson把json串转换成java实体对象的方法如下: 1.首先导入Gson的jar包,网上可以下载. java实体对象如下: public class Model { private double ...
随机推荐
- CF894E Ralph and Mushrooms_强连通分量_记忆化搜索_缩点
Code: #include<cstdio> #include<stack> #include<cstring> using namespace std; cons ...
- 禁止浏览器缓存input值
如果不想让浏览器缓存input的值,有2种方法: 方法一: 在不想使用缓存的input中添加 autocomplete="off"; <input type="te ...
- [学习笔记] CS131 Computer Vision: Foundations and Applications:Lecture 4 像素和滤波器
Background reading: Forsyth and Ponce, Computer Vision Chapter 7 Image sampling and quantization Typ ...
- CRM系统 - 总结 (一) 权限
1. 问:为什么程序需要权限控制? 答:生活中的权限限制,① 看灾难片电影<2012>中富人和权贵有权登上诺亚方舟,穷苦老百姓只有等着灾难的来临:② 屌丝们,有没有想过为什么那些长得漂亮身 ...
- java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
缺少slf4j的包: 添加依赖: 代码: 1 <dependency> 2 <groupId>org.slf4j</groupId> 3 <artifactI ...
- react生命周期知识点
react生命周期知识点 一个React组件的生命周期分为三个部分:实例化.存在期和销毁时. 实例化 组件在客户端被实例化,第一次被创建时,以下方法依次被调用: 1.getDefaultProps2. ...
- 11g,12c Oracle Rac安装
安装 Oracle 12cR1 RAC on Linux 7 本文介绍如何在Oracle Linux 7上安装2节点Oracle 12cR1 Real Application Cluster(RAC) ...
- 【codeforces 794B】Cutting Carrot
[题目链接]:http://codeforces.com/contest/794/problem/B [题意] 给你一个等腰三角形; 它的底边为1; 高为h; 要求你把这个等腰三角形分成n份面积相等的 ...
- 零基础学HTML 5实战开发(第一季)
開始学习html5了.趋势不得不学习啊,之前老毛说过落后就要挨打,如今是不学习就要被市场淘汰,被社会淘汰.喜欢挑战,喜欢冒险.来吧.csdn给我们提供了那么好的平台.用起来..零基础学HTML 5的实 ...
- 葡萄城公布新版ActiveReports 9报表控件和报表server
2014年11月10日---葡萄城宣布正式公布ActiveReports9,包含了三种报表模型:RDL报表.页面报表.区域报表.对于ActiveReports中的这个最新版本号中,我们专注于提高产品的 ...