2016-07-22 108 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))