Python将值转换为元组

时间:2017-11-20 16:31:31

标签: python json

在python中,我收到JSON数据。数据类似于以下存根:

{
    "id": 1,
    "naam": "4.13",
    "ruimte_temperatuur_sensor": {...},
     // etc
}

我将这个json映射到一个对象(注意传感器已经映射):

    ruimte = Ruimte(id=id,
                    naam=naam,
                    ruimte_temperatuur_sensor=temperatuur_sensor,
                    ruimte_humiditeit_sensor=humiditeit_sensor,
                    ruimte_beweging_sensor=beweging_sensor,
                    airco_temperatuur_sensor=airco_sensor,
                    radiator_temperatuur_sensor=radiator_sensor)

最奇怪的事情发生了:

JSON中的id字段是一个整数,但Python将其映射到元组。在我的调试器中,您可以清楚地看到id=id映射到一个整数,但突然间我的对象包含一个元组:

enter image description here

对象的构造函数不应该导致:

class Ruimte:
    def __init__(self,
                 id: int,
                 naam: str,
                 ruimte_temperatuur_sensor: Sensor,
                 ruimte_humiditeit_sensor: Sensor,
                 ruimte_beweging_sensor: Sensor,
                 airco_temperatuur_sensor: Sensor,
                 radiator_temperatuur_sensor: Sensor):
        self.id = id,
        self.naam = naam,
        self.ruimte_temperatuur_sensor = ruimte_temperatuur_sensor
        self.ruimte_humiditeit_sensor = ruimte_humiditeit_sensor
        self.ruimte_beweging_sensor = ruimte_beweging_sensor
        self.airco_temperatuur_sensor = airco_temperatuur_sensor
        self.radiator_temperatuur_sensor = radiator_temperatuur_sensor

在子对象中,id不会被解析为元组,例如ruimte.airco_temperatuur_sensor.id是一个整数:

enter image description here

但JSON的解析方式相同:

def _parse_json_to_sensor(self, json: dict) -> Sensor:
    id = json["id"]
    type = SensorType(json["type"])
    meet_interval_sec = json["sensorInstelling"]["meetIntervalSec"]
    opslaan_interval_sec = json["sensorInstelling"]["opslaanIntervalSec"]

    sensor = Sensor(id=id,
                    type=type,
                    meet_interval_sec=meet_interval_sec,
                    opslaan_interval_sec=opslaan_interval_sec)

我完全迷失了。可能导致这种情况的原因是什么?

2 个答案:

答案 0 :(得分:4)

您在分配self.idself.naam的行后面有逗号。删除它们。

a_string = 'string',
type(a_string)
>>> tuple

答案 1 :(得分:1)

该行中的逗号:

self.id = id,

导致创建元组。见这个例子:

a = 1

b = 1
c = 1,

print(b)
print(c)