Отображение текстового ответа в javascript

#javascript #react-native

#javascript #react-native

Вопрос:

Инициализация состояния

 this.state = {
apiResponse : []
}
  

установка состояния на ответ из api внутри componentDidMount

 this.setState({
 apiResponse: response
})
  

«ответ» выглядит как

 {polyinfo: "{"name": "hello1"}"}
{polyinfo: "{"name": "hello2"}"}
  

Мне нужно получить значение name

Что я пробовал

 list = () => {

const polyInfo = JSON.parse(this.state.apiResponseJson);
return polyInfo.map(element => {
console.log(element.name);
  // console.log(element.polyinfo.name);
});
  

};

Комментарии:

1. Не выглядит как допустимый json

2. Отредактировано просто для ясности

3. попробуйте jsonlint.com для проверки правильности json

4. я вижу 2 ошибки: значение ответа содержит 2 объекта json. Поместите их в один объект, добавив { и a} в начале и в конце. Также использование » неправильно: вы должны использовать «внутри» или наоборот. Затем проверьте это с помощью jsonlint, как сказал Кельвин. Вторая ошибка заключается в this.state.apiResponseJson. Правильно: this.state.apiResponse.

Ответ №1:

похоже, вы забыли добавить запятую в конце первой строки в

 {polyinfo: "{"name": "hello1"}"}
{polyinfo: "{"name": "hello2"}"}
  

но если предположить, что это было введено как допустимый массив, правильный способ доступа к name здесь был бы

 const parsedContainer = JSON.parse(this.state.apiResponse[i].polyinfo) //where "i" is the //array index
console.log(parsedContainer.name) //logging the name to the console
  

это работает, потому что мы анализируем строковый тип json из polyinfo и преобразуем его в json, который может прочитать javascript, а затем используем этот обработанный json для чтения свойства name.

Комментарии:

1. Я рекомендую синтаксический анализ json с помощью try / catch. все данные json нестабильны.

2. Я не согласен. на самом деле нет смысла использовать try catch для этой цели, потому что, как мы можем видеть, все данные json на 100% верны в формате json.