2016-05-10 23 views
1

Ich versuche, die zurückgegebene JSON im folgenden Code zu analysieren, genauer gesagt ich versuche, die res.name zum Komponentenstatus hinzuzufügen.Parsing JSON in Zustand

Sie können sehen, ich habe so weit wie this.setState ({Ergebnisse: res}) bekam, das die gesamte Antwort Objekt in den Komponentenstatus hinzufügen, aber ich habe Schwierigkeiten ‚Drill-Down‘ auf die Namenwerte. Ich habe versucht zu console.log (res.results) zu verwenden, aber es kommt wieder als nicht definiert, könnte einige verleihen eine helfende Hand etwas Licht auf dieses Problem zu vergießen ..

constructor() { 
    super(); 
    this.state = { 
     results: [] 
    } 
    } 

    apiRequest() { 
    request('http://localhost:3000/api', function (error, response, body) { 
    if (!error && response.statusCode == 200) { 
      var res = JSON.parse(JSON.stringify(response.body)) 
      console.log(res.results) // Should this not work? 
      this.setState({results:res}) 
     } 
    }.bind(this)) 
    } 

Returned ‚res‘ Json

{ 
    "count":87, 
    "next":"http://swapi.co/api/people/?page=2", 
    "previous":null, 
    "results":[ 
     {"name":"Luke Skywalker"}, 
     {"name":"Han Solo"} 
    ] 
} 
+0

ist response.body nicht bereits eine json? – QoP

+0

Also brauchen wir das richtige Strygie? – James

+0

es gibt keine Notwendigkeit dafür – QoP

Antwort

2

Ihre Antwort sollte bereits ein JSON-Objekt sein. Rufen Sie JSON.parse(JSON.stringify(response))

wird Sie zurück zu Platz eins. Sie serialisieren und deserialisieren dasselbe Objekt.

sollten Sie in der Lage sein zu tun:

console.log(JSON.stringify(response));

Welche ausgibt das gesamte Objekt auf der Konsole, so dass Sie alles sehen können.

Dann können Sie speichern nur das Objekt direkt in den Staat, durch den Aufruf:

this.setState({results:response.body})

+0

Vielen Dank! Ich dachte, ich sollte Antwort verwenden, aber schien keine Ergebnisse zu bekommen, muss irgendwo einen Fehler gemacht haben, wie das jetzt funktioniert – James

+0

apiResponse: JSON.parse (response.body) - Scheint, ich musste analysieren .. – James

+0

@James 'JSON.stringify (response.body)' hat eine Zeichenkette (die JSON repräsentiert) in eine JSON Zeichenkette umgewandelt (die entkoppeltes JSON enthält, dh du hast die JSON doppelt codiert). So hat 'JSON.parse()' nur die ursprüngliche JSON-Zeichenfolge zurückgegeben, kein decodiertes Objekt. 'JSON.parse (response.body)' gibt Ihnen das dekodierte Objekt. – Aaron