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

2024-03-28 12:08:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python2.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. voltageDC[]数组将为voltageDC_1 = ...中的每个值展开
  3. channelID不会被序列化,只考虑参数名。你知道吗

Tags: 对象json参数序列化数组timestampclasschannelid
1条回答
网友
1楼 · 发布于 2024-03-28 12:08:13

您必须为您的类实现一个自定义的^{}来解压每个数组:

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)

相关问题 更多 >