我正在尝试使用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序列化消息的详细信息:
voltageRMS1
- 指的是channelID = 1
voltageDC[]
数组将针对voltageDC_1 = ...
channelID
不会被序列化,只需考虑参数名称。答案 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)