复杂的Python对象到JSON的转换

复杂的Python对象到JSON的转换,python,json,class,oop,Python,Json,Class,Oop,我需要将一个复杂的python对象转换为JSON,所谓复杂是指包含int变量、字符串变量和2个自定义对象列表的对象 我的Python对象的构造函数是: def __init__(self, skills="",vid=""): self.Skills = list([]) for skillID in skills.split("-"): if not skillID == "": tmpSkill = Skill()

我需要将一个复杂的python对象转换为JSON,所谓复杂是指包含int变量、字符串变量和2个自定义对象列表的对象

我的Python对象的构造函数是:

 def __init__(self, skills="",vid=""):
    self.Skills = list([])
    for skillID in skills.split("-"):
        if not skillID == "":
            tmpSkill = Skill()
            tmpSkillObj = DBCommands.getSkill(skillID)
            tmpSkill.ID = tmpSkillObj[0][0] #tmpSkillObj[0][0]
            tmpSkill.Name = tmpSkillObj[0][1]
            tmpSkill.isMain = True
            tmpSkill.CurrentlyTesting = False
            tmpSkill.isSub = False
            tmpSkill.Level = 0
            tmpSkill.Tested = False
            tmpSkill.Score = 0
            tmpSkill.Confidence = 0
            tmpSkill.BestScore = 0
            tmpSkill.ParentID = 0
            self.Skills.append(tmpSkill)
            self.AskedQuestions.append(tmpSkill)
    self.Skills = list(self.Skills)
    if not skills  == "":
        self.Skills[0].CurrentlyTesting = True #Start testing the first skill
    if not vid  == "":
        self.VacancyID = int(vid)
    self.PlayerID = 0
    self.Score = float(0)
    self.AskedQuestions = list([])
    self.MaxLevel = 0
    self.AssessmentIsFinished = False
我需要一种机制来对对象进行编码和解码。

编码:

import base64
import pickle
token = base64.b64encode(pickle.dumps(token,-1))
解码:

import pickle
import base64
Obj = pickle.loads(base64.b64decode(token))

它必须是json吗?为什么不呢?场景是:服务器应该将对象转换为字符串(JSON),然后加密该字符串并将其作为令牌发送。当服务器接收到令牌时,它应该能够执行相反的工作,解密令牌,将字符串(JSON)解析为新对象。这对于
pickle.dumps()
应该可以正常工作。您的对象将被序列化并作为字符串返回,您可以使用任何您喜欢的方式对其进行加密和传输。特别是如果您打算从安全发送的文件中重建相同的对象,我建议使用
pickle
,因为它易于重新构建对象实例。使用.json,您必须创建一个特殊的解包脚本来创建一个新实例(基本上是一个替代的
\uuuuu init\uuuu
,它读取json而不是普通的输入)@Rawing和Aaron谢谢大家,问题解决了。我只是使用了pickle类,然后用base64对其进行编码,然后对其进行解码并将其加载到对象中。