2016-05-10 7 views
1

に解析JSONは、より具体的に私は、コンポーネントの状態にres.nameを追加しようとしています。あなたは、私は限りthis.setState({結果:RES})として持って見ることができますは、私は以下のコードで返されるJSONを解析しようとしています国家

、これはコンポーネントの状態に応答全体のオブジェクトを追加しますが、私は名前の値に「ドリルダウン」難しさを持っています。私は(res.results)はconsole.logを使用するようにしようとしたが、それはバックのように未定義くる、いくつかは、この問題にいくつかの光を当てるために手を貸すことができ..

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)) 
    } 

返さ「はRES」JSON

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

はすでにJSONをresponse.bodyではありません。

次に、あなただけ呼び出すことにより、状態のオブジェクトを直接保存することができますか? – QoP

+0

stringifyの権利が必要なのですか? – James

+0

その – QoP

答えて

2

あなたの応答は、すでにJSONオブジェクトでなければなりません。だから、 JSON.parse(JSON.stringify(response))

に電話すると正方形に戻ります。同じオブジェクトをシリアライズしてデシリアライズしています。

あなたは行うことができる必要があります:あなたはどちらのすべてを見ることができるので、あなたのコンソールに出力オブジェクト全体を意志

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

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

+0

多くの感謝のための必要はありません! – James

+0

apiResponseはどこかミスを犯している必要があります@James 'JSON.stringify(response.body)は' JSON文字列に(JSONを表す)文字列を変換した(含むあなたはJSONダブルエンコードつまり、JSONをエスケープ)。だから、 'JSON.parse()'はデコードされたオブジェクトではなくオリジナルのJSON文字列にあなたを戻していました。 'JSON.parse(response.body)'はあなたにデコードされたオブジェクトを与えます。 – James

+0

..私は解析する必要がなかったようだ - JSON.parse(response.body):私は応答を使用するべきだと思いましたが、どんな結果を得ることしていないようでした、これは今、正常に動作として – Aaron

関連する問題