2016-07-22 138 views
1

我需要将一个复杂的python对象转换为JSON,复杂的我的意思是一个对象包含int变量,字符串变量和2个自定义对象列表。复杂的Python对象到JSON转换

我的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 

我需要一个机制来编码对象,并对其进行解码。

+3

是否必须是JSON?为什么不[pickle](https://docs.python.org/2/library/pickle.html)呢? –

+0

该场景为: 服务器应将对象转换为字符串(JSON),然后加密该字符串并将其作为令牌发送。 当服务器收到令牌时,它应该能够做相反的工作,解密令牌,将字符串(JSON)解析为新的对象。 – Deve

+1

这应该用'pickle.dumps()'工作得很好。你的对象将被序列化并返回一个字符串,你可以使用任何你喜欢的方式进行加密和传输。 – Aaron

回答

1

编码:

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

解码:

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