2017-10-24 7 views
0

私はHufmanのHoneywell Pythonコードを使用してMyTotalConnectComfortウェブサイトからデータを取得しています。コードはhereです。私は2.7のコードを修正しました。私はフラスコを使用しています。はjson.loadのネストされた値にアクセスする必要があります

私はclient.locations()を呼び出すと、6つのキーを持つjsonファイルが返されます。私はjson内のデータを壊して、私が望む単一の鍵の後ろにあるデータを取得します。これは「Devices」です。私はこれを行うには、次のコードを使用します。私はこのスレッドの一番下にあるデータやフォーマットされたリストを取り戻す

Honeywelldata = client.locations() 
newlist2 = [] 
dada = {} 
for keyl, value in Honeywelldata[0].items(): 
    if keyl == "Devices": 
     dada[keyl] = value 
     print "dadakey", dada[keyl] 
newlist2.append(dada) 
print "newlist2 keys", newlist2[0].keys() 
print "newlist2", json.dumps(newlist2, sort_keys=True,indent=4,separators=(',', ': ')) 

。私はこのjsonをhtmlに渡して、このリストから値を投稿するために次のhtmlコードを使用できるようにしようとしています。私は多くのことを試しましたが、私は「デバイス」の子供の価値に到達できません。

{{ honeywell.Devices.ThermostatData.Outdoorhumidity | safe }}

は、私は私がする再キーこのリストまたは私が間違っているの何初心者というの横にが必要です。このエラーUndefinedError: 'list object' has no attribute 'Devices'

を得続けます。ありがとう。ここ

はnewlist2キー&データ(jsonlint.comが有効なJSONとしてこれを示す)

newlist2 keys [u'Devices'] 
[{ 
"Devices": [{ 
    "AlertSettings": null, 
    "DehumidifierData": null, 
    "DemandResponseData": null, 
    "DeviceID": 1111111, 
    "DeviceType": 48, 
    "FanData": null, 
    "HasAlertSettings": false, 
    "HasDehumidifier": false, 
    "HasFan": false, 
    "HasHumidifier": false, 
    "HasUIData": true, 
    "HoldUntilCapable": true, 
    "HumidifierData": null, 
    "IsAlive": true, 
    "IsUpgrading": false, 
    "LocationID": 1111111, 
    "MacID": "000000000000", 
    "Name": "THERMOSTAT", 
    "Schedule": null, 
    "ScheduleCapable": true, 
    "ThermostatData": { 
     "AllowedModes": [ 
      3, 
      1, 
      2 
     ], 
     "CoolRate": null, 
     "CoolSetpoint": null, 
     "Deadband": 0.0, 
     "DisplayUnits": 1, 
     "EquipmentOutputStatus": null, 
     "HeatRate": null, 
     "HeatSetpoint": null, 
     "IndoorHumidity": 39.0, 
     "IndoorHumidityStatus": 0, 
     "IndoorTemperature": 74.0, 
     "IndoorTemperatureStatus": 0, 
     "IsCommercial": false, 
     "IsInVacationHoldMode": false, 
     "MaxCoolSetpoint": 99.0, 
     "MaxHeatSetpoint": 90.0, 
     "MinCoolSetpoint": 50.0, 
     "MinHeatSetpoint": 40.0, 
     "Mode": null, 
     "NextTime": null, 
     "OutdoorHumidity": 13.0, 
     "OutdoorHumidityAvailable": true, 
     "OutdoorHumidityStatus": 0, 
     "OutdoorTemperature": 103.0, 
     "OutdoorTemperatureAvailable": true, 
     "OutdoorTemperatureStatus": 0, 
     "ScheduleCoolSp": 75.0, 
     "ScheduleHeatSp": 62.0, 
     "Status": null, 
     "VacationHold": null, 
     "VacationHoldCancelable": true 
    } 
}] 

}である]

+0

リストの場合、属性を取ってはいけません...インデックスを取るべきです... – Mangohero1

+0

ちょうど私が知っている - なぜ否定的な投票? – bburwell

答えて

1

(私は仮定が、それはDjangoのテンプレートフラグメントと-またはJinja2の表現であることを確認してください:

{{ honeywell.Devices.ThermostatData.Outdoorhumidity | safe }} 

変数honeywelllistように見えるあなたが試すことができます。

{{ honeywell[0].Devices[0].ThermostatData.Outdoorhumidity | safe }} 

+0

ありがとうLaurent - 私はそれを試みたが、私は次のエラーが発生していますUndefinedError: 'リストオブジェクト'には 'ThermostatData'属性がありません。 – bburwell

+0

あなたのJSONオブジェクトを読むと、* Devices *もリストであることがわかります。 'Devices [0]'を使ってください(あるいはループしてください)。私の編集を参照してください。 –

0

{{ honeywell.Devices.ThermostatData.Outdoorhumidity | safe }}

ハネウェルはlistタイプのものです。正しいオブジェクトを参照していることを確認してください。次の式で

関連する問題