#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.