我正在努力使用Nest API及其对结构的JSON响应。我想要一个结构对象列表,但是Nest创建了多个名为结构ID的属性。对我而言,实现这一点的人看起来完全误解了如何使用JSON。我希望能够让Nest API返回更合理的JSON结构。有没有办法从Nest获得更友好的JSON repsonse。如果是这样,怎么样?
这是Nest返回结构的方式:
{
"structures": {
"VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw": {
"structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw",
"thermostats": [
"peyiJNo0IldT2YlIVtYaGQ"
],
"smoke_co_alarms": [
"RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs"
],
"devices": {},
"away": "home",
"name": "Home",
"country_code": "US",
"postal_code": "94304",
"peak_period_start_time": "2015-10-31T23:59:59.000Z",
"peak_period_end_time": "2015-10-31T23:59:59.000Z",
"time_zone": "America/Los_Angeles",
"eta": {},
"wheres": {
"Fqp6wJI...": {
"where_id": "Fqp6wJI...",
"name": "Bedroom"
}
}
}
}
}
这就是我想要的:
{
"structures": [
{
"structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw",
"thermostats": [
"peyiJNo0IldT2YlIVtYaGQ"
],
"smoke_co_alarms": [
"RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs"
],
"devices": [],
"away": "home",
"name": "Home",
"country_code": "US",
"postal_code": "94304",
"peak_period_start_time": "2015-10-31T23:59:59.000Z",
"peak_period_end_time": "2015-10-31T23:59:59.000Z",
"time_zone": "America/Los_Angeles",
"eta": {},
"wheres": [
{
"where_id": "Fqp6wJI...",
"name": "Bedroom"
}
}
]
}
}
答案 0 :(得分:2)
JSON没有任何问题,你看到的是associative array,它是一种集合形式,就像数组,列表或集合一样。在JSON中,关联数组可以表示为对象{}
。它是一个非常基本的数据结构,有许多名称,包括Map或Dictionary,具体取决于所使用的编程语言。
是否使用关联数组或普通数组/列表在很大程度上取决于您希望访问项目的方式。它与存储在集合中的对象类型没有任何关系。
如果您想通过键值和"正常"来访问项目,通常会使用关联数组。数组/列表,如果要按位置访问项目。同样"正常"如果项的顺序很重要,则数组/列表通常更好,而关联数组通常不是有序的(尽管它们可能取决于实现细节)。
大多数编程环境允许您迭代关联数组的键值列表,允许类似访问" normal"阵列/列表。
以下是JavaScript中的一个简单示例:
var c;
c = [1, 2]; // ordinary array
c[0]; // access by position
var i;
for (i = 0; i < c.length; ++i) { // loop through all items and ...
console.log(c[i]); // access by position
}
c = {"key1": 1, "key2": 2}; // associative array
c.key2; // access by key
var key;
for (key in c) { // iterate over all keys and ...
console.log(c[key]); // access by key value
}