2017-03-16 4 views
0

Ich arbeite derzeit an einem REST-API/Website-Projekt, bei dem meine REST-API über eine Antwort ein Array von Objekten vom Server zurückgeben und GSON verwenden muss, um aus den Daten ein JSON-Array zu erstellen. Beim Versuch, Werte aus dem Javascript-Array für die Website zu erhalten, werde ich jedoch undefiniert. Dies ist das Array:Javascript Array Wert undefiniert?

var userArr =[ 
    { 
    "0x1": { 
     "firstName": "Test1", 
     "lastName": "Test1", 
     "hobbies": [ 
     { 
      "id": 1, 
      "name": "Fodbold", 
      "people": [ 
      "0x1" 
      ] 
     } 
     ], 
     "id": 1, 
     "address": { 
     "id": 1, 
     "street": "Street1", 
     "cityInfo": { 
      "id": 1, 
      "zipCode": "0555", 
      "city": "Scanning" 
     }, 
     "infoList": [ 
      "0x1", 
      "0x2" 
     ] 
     }, 
     "phones": [ 
     { 
      "id": 1, 
      "number": "123124", 
      "info": "0x1" 
     } 
     ] 
    } 
]; 

Wenn ich versuche, userArr [0] .firstName zu nennen, habe ich eine Fehlermeldung, dass es ist nicht definiert, obwohl die Daten vorhanden ist. Dies ist von einem Get-Call, den ich in meinem Javascript aus meiner REST-API mache, die dieses spezifische Array zurücksendet. Ich habe versucht, das Array mit mehreren Objekten zu durchlaufen, aber ich kann keine Informationen abrufen.

+0

Sie tun sollten, 'userArr [0] [ "0x1"] firstName', haben Sie zwei verschachtelte Objekte – Telokis

+0

Admiral Ackbar:.! * Es ist ein Tippfehler * –

Antwort

2

Ihre userArr ist ein Array von Objekten, die keine firstName Eigenschaft haben. Sie haben nur eine Eigenschaft mit dem Namen 0x1 aus irgendeinem Grund. Und diese 0x1 Eigenschaft hat firstName Eigenschaft.

Sie zugreifen können firstName von 0x1 Eigenschaft dieser Notation:

userArr[0]["0x1"].firstName 

Hier ist die Arbeits Demo:

var userArr = [{ 
 
    "0x1": { 
 
    "firstName": "Test1", 
 
    "lastName": "Test1", 
 
    "hobbies": [{ 
 
     "id": 1, 
 
     "name": "Fodbold", 
 
     "people": [ 
 
     "0x1" 
 
     ] 
 
    }], 
 
    "id": 1, 
 
    "address": { 
 
     "id": 1, 
 
     "street": "Street1", 
 
     "cityInfo": { 
 
     "id": 1, 
 
     "zipCode": "0555", 
 
     "city": "Scanning" 
 
     }, 
 
     "infoList": [ 
 
     "0x1", 
 
     "0x2" 
 
     ] 
 
    }, 
 
    "phones": [{ 
 
     "id": 1, 
 
     "number": "123124", 
 
     "info": "0x1" 
 
    }] 
 
    } 
 
}]; 
 

 
console.log(userArr[0]["0x1"].firstName);

By the way, ist es ein fehlendes Schließen } Klammer am Ende des Arrays in Ihrem Code.

+0

meine Dummheit entschuldigen ... Thank Du so viel Bruder! –

0

versuchen dieses

userArr[0]["0x1"].firstName 
0

Incase Wert "0x1" dynamisch ist, können Sie es durch die Verwendung Object.keys(userArr[0])[0] zugreifen kann den ersten Schlüssel des Objekts zu erhalten.

Hier Lösung:

var userArr = [{ 
 
    "0x1": { 
 
    "firstName": "Test1", 
 
    "lastName": "Test1", 
 
    "hobbies": [{ 
 
     "id": 1, 
 
     "name": "Fodbold", 
 
     "people": [ 
 
     "0x1" 
 
     ] 
 
    }], 
 
    "id": 1, 
 
    "address": { 
 
     "id": 1, 
 
     "street": "Street1", 
 
     "cityInfo": { 
 
     "id": 1, 
 
     "zipCode": "0555", 
 
     "city": "Scanning" 
 
     }, 
 
     "infoList": [ 
 
     "0x1", 
 
     "0x2" 
 
     ] 
 
    }, 
 
    "phones": [{ 
 
     "id": 1, 
 
     "number": "123124", 
 
     "info": "0x1" 
 
    }] 
 
    } 
 
}]; 
 

 
console.log(userArr[0][Object.keys(userArr[0])[0]].firstName);

1

Ich denke, wenn Sie diesen Code auf diese Weise schreiben Sie es einfach zu verstehen ist und das Problem finden

var userArr =[ 
    { 
    "0x1": { 
     "firstName": "Test1", 
     "lastName": "Test1", 
     "hobbies": [{"id": 1,"name": "Fodbold","people": ["0x1"]}], 
     "id": 1, 
     "address": {"id": 1,"street": "Street1","cityInfo": {"id": 1,"zipCode": "0555","city": "Scanning"}, 
     "infoList": ["0x1","0x2"]}, 
     "phones": [{"id": 1,"number": "123124","info": "0x1"}] 
    } 
    } 
]; 

Sie auch die fehlende letzte zweite Klammer. Dann könnten Sie diese verwenden console.log(userArr[0]["0x1"].firstName);