2016-10-03 39 views
0

我正在嘗試使用Python 2.7的json庫創建JSON對象。我創建一個類所需要的參數序列化,如:JSON可序列化類中的動態參數

class DataMessage: 
    channelID = 0 
    messageID = 0 
    timestamp = 0 
    voltageRMS = 0 
    currentRMS = 0 
    voltageDC = [] 
    currentDC = [] 


但其序列化到JSON我需要的參數的名稱有關的channelID改變的時候。爲例如:當的channelID = 1的數據應序列等:

{ 
    "messageID" = id, 
    "timestamp" = 32432, 
    "voltageRMS1" = 548, 
    "currentRMS1" = 5548, 
    "voltageDC1_1" = 43, 
    "voltageDC1_2" = 44, 
    "voltageDC1_3" = 45, 
    # .... 
    "currentDC1_1" = 32, 
    # .... 
} 

我沒有找到這個庫中的任何功能,這將排除一些序列化參數的(channelID)或動態創建的params(voltageDC[])陣列。

所以,對於JSON序列化消息的細節:

  1. voltageRMS1 - 指的是事實,channelID = 1
  2. voltageDC[]陣列將爲每個值voltageDC_1 = ...
  3. channelID不會被序列化,只是擴大考慮參數名稱。
+1

不,沒有任何功能可以完全做到這一點,因爲這是相當專業化的。用這些鍵生成一個字典;鑰匙只是字符串,所以它們很容易根據你的規則生產。 –

+1

嘗試自己寫點東西來提高你的技能。如果你會失敗,然後讓我們知道,但粘貼你做了/發現。 – turkus

回答

1

你將不得不執行你的類的定製JSONEncoder解包每個陣列:

from json import JSONEncoder 

class MyEncoder(JSONEncoder): 
    def default(self, o): 
     result = { 
      'messageID': o.messageID, 
      ... 
     } 

     for n, item in enumerate(o.voltageDC): 
      result['voltageDC{}_{}'.format(o.channelID, n)] = item 

     # and so on... 

     return result 

然後,您可以撥打json.dumps()與您的自定義編碼器類來獲得JSON輸出:

dm = DataMessage() 
... 
json.dumps(dm, cls=MyEncoder)