JSON可序列化类中的动态参数

时间:2016-10-03 12:34:15

标签: python json serialization

我正在尝试使用Python 2.7中的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. 这一事实
  3. voltageDC[]数组将针对voltageDC_1 = ...
  4. 中的每个值展开
  5. channelID不会被序列化,只需考虑参数名称。

1 个答案:

答案 0 :(得分: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)