2017-11-20 17 views
0

Pythonでは、JSONデータを受け取ります。奇妙なことが起こる値をタプルに変換するPython

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) 

idフィールドを、私は、オブジェクト(センサがすでにマップされています)にこのJSONをマップ

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

:データには、以下のスタブのようになります。 JSONでは整数ですが、Pythonはそれをタプルにマッピングします。

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=idが整数にマップするが、その後突然、私のオブジェクトのすべてのタプルが含まれていることをはっきりと見ることができますexampe ruimte.airco_temperatuur_sensor.idため、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) 

私は完全にこれに迷ってしまいました。何が原因でしょうか?

答えて

4

self.idself.naamを割り当てる行の後にカンマがあります。削除してください。

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

行にカンマ:

self.id = id, 

はタプルの創造につながります。この例を参照してください:

a = 1 

b = 1 
c = 1, 

print(b) 
print(c) 
関連する問題