2016-05-10 8 views
1

Я пытаюсь проанализировать возвращенный JSON в коде ниже, а точнее, я пытаюсь добавить res.name в состояние компонентов.Parsing Json in State

Вы можете видеть, что у меня есть до this.setState ({results: res}), это добавляет весь объект ответа к состоянию компонента, но у меня возникают трудности с «сверлением» до значений имени. Я пытался использовать console.log (res.results), но он возвращается как неопределенные, может кто протянуть руку, чтобы пролить свет на эту проблему ..

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

не response.body уже в JSON? – QoP

+0

Нужна ли необходимость в прямолинейности? – James

+0

нет необходимости – QoP

ответ

2

Ваш ответ уже должен быть объектом JSON. Таким образом, по телефону JSON.parse(JSON.stringify(response))

вернет вас на первый план. Вы сериализуете и десериализуете один и тот же объект.

Вы должны быть в состоянии сделать:

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

Какой будет выводить весь объект на консоль, чтобы вы могли видеть все.

Тогда вы можете просто сохранить объект непосредственно в состоянии, позвонив по телефону:

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

+0

Большое спасибо! Я действительно думал, что должен использовать ответ, но, похоже, не получал никаких результатов, должен был сделать ошибку где-то, так как это отлично работает сейчас – James

+0

apiResponse: JSON.parse (response.body) - Кажется, мне нужно было разобрать .. – James

+0

@James 'JSON.stringify (response.body)' преобразовывал строку (представляющую JSON) в строку JSON (содержащую экранированный JSON, то есть вы дважды закодировали JSON). Поэтому 'JSON.parse()' возвращал вас только в исходную строку JSON, а не в декодированный объект. 'JSON.parse (response.body)' дает вам декодированный объект. – Aaron