需要访问 json.load 中的嵌套值
need to access nested values in json.load
我正在使用 Hufman 的 Honeywell Python 代码从 MyTotalConnectComfort 网站提取数据。代码是 here。我修改了 2.7 的代码。我也在用 Flask。
当我调用 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 代码从该列表中获取 post 值。我已经尝试了很多东西,但我无法获得 'Devices' 的子值。
{{ 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
}
}]
}]
{{ honeywell.Devices.ThermostatData.Outdoorhumidity | safe }}
霍尼韦尔属于list
类型。确保您指的是正确的对象。
在以下表达式中(我假设它是 Django 模板片段和-或 Jinja2 表达式:
{{ honeywell.Devices.ThermostatData.Outdoorhumidity | safe }}
变量 honeywell
似乎是 list
。你可以试试:
{{ honeywell[0].Devices[0].ThermostatData.Outdoorhumidity | safe }}
获取此列表的第一个元素。
我正在使用 Hufman 的 Honeywell Python 代码从 MyTotalConnectComfort 网站提取数据。代码是 here。我修改了 2.7 的代码。我也在用 Flask。
当我调用 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 代码从该列表中获取 post 值。我已经尝试了很多东西,但我无法获得 'Devices' 的子值。
{{ 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
}
}]
}]
{{ honeywell.Devices.ThermostatData.Outdoorhumidity | safe }}
霍尼韦尔属于list
类型。确保您指的是正确的对象。
在以下表达式中(我假设它是 Django 模板片段和-或 Jinja2 表达式:
{{ honeywell.Devices.ThermostatData.Outdoorhumidity | safe }}
变量 honeywell
似乎是 list
。你可以试试:
{{ honeywell[0].Devices[0].ThermostatData.Outdoorhumidity | safe }}
获取此列表的第一个元素。