python转json_Python复杂对象转json

# Python复杂对象转json

python不常用, 出了岔子, 想将几个实体转成json, 但是因为实体列表里的实体里面套实体列表...直接使用`json.dumps(obj)`会出现一些错误, 只能给里面的列表添加的时候调用`object.__dict__`, 但是外层使用`object.__dict__`就会报错, 很迷, 大概就是里面的元素无法序列化, 或者是某一个属性无法找到对应的"key".

### 嗐, 直接上代码:

```Python

# 其实这么写就可以了=.=

json.dumps(obj=self.students,

default=lambda x : x.__dict__, sort_keys=False, indent=2)

```

### 这里是一个小Demo:

```Python

import json

class Course:

def __init__(self, courseNum, courseName, courseCredit):

self.CourseNum = courseNum

self.CourseName = courseName

self.CourseCredit = courseCredit

class Student:

def __init__(self, studentNum, studentName, *courses):

self.StudentNum = studentNum

self.StudentName = studentName

self.Courses = []

self.Courses += courses

class IStudentResp(object):

def AddStudent(self, student):

pass

def SelectStudent(self, studentNum):

pass

def DeleteStudent(self, studentNum):

pass

def AddCourse(self, studentNum, course):

pass

def SelectCourse(self, studentNum, courseNum):

pass

def DeleteCourse(self, studentNum, courseNum):

pass

class StudentResp(IStudentResp):

students = []

def __init__(self):

pass

def AddStudent(self, student):

self.students.append(student)

def SelectStudent(self, studentNum):

for stu in self.students:

if studentNum == stu.StudentNum:

return stu

def DeleteStudent(self, studentNum):

self.students.remove(self.SelectStudent(studentNum))

def AddCourse(self, studentNum, course):

self.SelectStudent(studentNum).Courses.append(course)

def SelectCourse(self, studentNum, courseNum):

for stu in self.students:

if stu.StudentNum == studentNum:

for course in stu.Courses:

if course.CourseNum == courseNum:

return course

def DeleteCourse(self, studentNum, courseNum):

self.SelectStudent(studentNum).Courses\

.remove(self.SelectCourse(studentNum, courseNum))

def show(self):

print(json.dumps(obj=self.students,

default=lambda x : x.__dict__, sort_keys=False, indent=2))

# print(json.dumps(self.students))

if __name__ == "__main__":

sp = StudentResp()

sp.AddStudent(Student("001", "001", Course("A", "A", 2), Course("A", "A", 2)))

sp.AddStudent(Student("002", "001", Course("A", "A", 2), Course("A", "A", 2)))

sp.AddStudent(Student("003", "001", Course("A", "A", 2), Course("A", "A", 2)))

sp.AddStudent(Student("004", "001", Course("A", "A", 2), Course("A", "A", 2)))

sp.AddCourse("001", Course("A", "A", 2))

sp.AddCourse("001", Course("A", "A", 2))

sp.AddCourse("001", Course("A", "A", 2))

sp.AddCourse("001", Course("A", "A", 2))

sp.show()

```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值