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()]python json字符串转数组
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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。