如果对象名称是数字,则使用JSON对象名称

时间:2016-06-14 00:32:50

标签: javascript arrays json

我正在使用一个返回数据数组的API,我使用JSON.Parse来使用数据。我能够收集正确的数据细节,但是我希望能够将这些细节链​​接到它们所包含的对象。

我使用以下代码来收集我的数组和JSON解析:

var venue = JSON.parse(this.responseText);
console.log(venue);

返回:Object {4293315: Array[108]}

然后我通过运行以下代码解析'4293315'中包含的数组:

for(var person in venue) {
    var personDetail = venue[person];

    for(detail in personDetail) {
        if(personDetail[detail].max_rssi > maxRssi) {
            venueDetails.push(personDetail[detail]);
        }
    }           
}

var capacity = venueDetails.length;
capacity --;
console.log("capacity: " + capacity);
var temp = JSON.stringify(venueDetails);
console.log(venue +": " + temp);

返回:

capacity: 6
[object Object]: [{"mac_id":12960837,"wifi_uid":null,"first_seen":"2016-06-14T00:13:23.000Z","last_seen":"2016-06-14T00:13:23.000Z","max_rssi":-55,"latest_rssi":-55,"frames":1},...

问题是对象名称是一个ID号,例如4293315,所以当我尝试运行venue.4293315.name时收到错误。

有人可以帮我弄清楚如何存储对象名称,以便我可以将内部包含的值与对象相关联吗?例如,我希望能够将对象名称存储在键和值映射中,以便稍后我可以询问每个对象或ID的容量信息。

4 个答案:

答案 0 :(得分:1)

您可以通过以下方式以编程方式获取名称的值:

var objectNames = Object.keys(venue); // gives an array of the keys

假设你知道只有一个:

var id = objectNames[0];

然后,您可以使用id访问属性,正如其他人所示。

答案 1 :(得分:0)

您可以使用venue[4293315].name访问会场名称。

如果您确实想使用问题中的格式访问值,可以在每个ID号的开头附加一个字符串“id”(或您喜欢的任何内容)。然后,您可以使用venue.id4293315.name

答案 2 :(得分:0)

访问对象中的数字时,或者如果需要根据变量获取对象中的项目,请使用括号表示法。

object.property被称为Dot Notation,如果该属性不以数字开头,则可以使用它。

object[property]称为Bracket Notation,可用于访问不符合常规变量名称的属性。

myObj = {
    'hello': 'world',
    '17921': 'foo'
}

在此示例中,您可以正常访问myObj.hello,但您必须使用myObj[17921]来访问编号名称,该名称通常不会被视为有效的JS变量名称。

在同一权利中,如果您有一个名为numberId的变量等于17921,则可以使用myObj[numberId]获得相同的数字。

答案 3 :(得分:0)

在我的情况下,我将PropertyName与json属性一起使用,也许可以帮助某人

        {
            "1": "English LL",
            "2": "Individuals and Societies",
            "3": "Sciences",
            "4": "Visual Arts # Music",
            "5": "Arabic LL",
            "Day": "Su"
          }
    //Change the number to 
           [JsonProperty(PropertyName = "1")]
            public string Day1{ get; set; }
           [JsonProperty(PropertyName = "2")]
            public string Day2{ get; set; }
           [JsonProperty(PropertyName = "3")]
            public string Day3{ get; set; }
           [JsonProperty(PropertyName = "4")]
            public string Day4{ get; set; }
           [JsonProperty(PropertyName = "5")]
            public string Day5{ get; set; }
           [JsonProperty(PropertyName = "6")]
            public string Day6{ get; set; }