2017-05-02 5 views
0

ich den folgenden Code verwende eine API aufrufen und zurück Ergebnisse:Javascript Nullwert im Objekt zurückkehr

api.jobs.all(function(response) { 

const obj = response.data.map(function(item) { 
    return [item.id, item.billed.amountString]; 

}); 
}); 

Mit folgendem JSON:

{ 
    "data": [ 
    { 
    "id": 2090170, 
    "deadline": null, 
    "jobId": { 
     "id": 1644 
    }, 
    "billed": { 
     "amountString": 200, 
     "currencyType": "CAD" 
    } 
    }, 
    { 
    "id": 2090171, 
    "deadline": null, 
    "jobId": { 
     "id": 1645 
    }, 
    "billed": { 
     "amountString": 400, 
     "currencyType": "USD" 
    } 
}]} 

Der Code für das funktioniert gut, das meiste, was ich bekomme gute Ergebnisse, mit Ausnahme von: billed.amountString

Ich bekomme immer den folgenden Fehler:

TypeError: Cannot read property 'amountString' of null

Kann jemand sehen, warum das Null zurückgeben würde?

Auch ist es eine Möglichkeit, in der ich konnte den API-Aufruf durchlaufen und es zwingen, Folgendes zu tun:

If .amountString === null, .amountString = ""; 
+2

Ihre JSON ist ungültig. Sie haben ein einzelnes Objekt in Ihrem Array, das zwei Eigenschaften mit dem Schlüssel "id" hat. –

+0

Sorry, Tippfehler. Ich habe den Beitrag aktualisiert. –

+1

Sie sollten Ihre JSON-Daten erneut überprüfen. Sie haben ein einzelnes Objekt in einem Datenarray, das doppelte Eigenschaften enthält, die vermutlich Teil eines separaten Objekts im Array sein sollen. – mhodges

Antwort

1

var response = { 
 
    "data": [ 
 
    { 
 
    "id": 2090170, 
 
    "deadline": null, 
 
    "jobId": { 
 
     "id": 1644 
 
    }, 
 
    "billed": { 
 
     "amountString": 200, 
 
     "currencyType": "CAD" 
 
    } 
 
    }, 
 
    { 
 
    "id": 2090171, 
 
    "deadline": null, 
 
    "jobId": { 
 
     "id": 1645 
 
    }, 
 
    "billed": { 
 
     "amountString": 400, 
 
     "currencyType": "USD" 
 
    } 
 
}]}; 
 

 
const obj = (response.data).map(function(item) { 
 
    return [item.id, item.billed.amountString]; 
 
}); 
 

 
console.log(obj);

+0

Danke! Dies half mir, das Problem zu lösen –

+0

Ich bin froh, dass es Ihr Problem gelöst hat. Danke, dass Sie diese Frage gestellt haben. Es half mir auch, meine Konzepte aufzufrischen: p –

0

könnten Sie die Bibliothek benutzen lodash. Mit der lodash-Methode get kann versucht werden, auf ein Objektfeld zuzugreifen. Wenn es nicht existiert, können Sie einen Standard-Rückgabewert angeben. Siehe https://lodash.com/.

// This will try to access item.billed.amountString 
// If an item does not exist anywhere along the way 
// it will return the default. 

// _.get(OBJECT, PATH, DEFAULT) 
_.get(item, ['billed', 'amountString'], '')