#javascript #json #mapping #fetch-api
#javascript #json #сопоставление #выборка-api
Вопрос:
Я использую fetch api в javascript. Однако у меня возникают проблемы с отображением через различные форматы объектов JSON. Вот два фрагмента моего кода, первый из которых работает, а второй нет из-за формата JSON.
Это отлично работает —
fetch('https://randomuser.me/api/?results=3')
.then(results => { return results.json(); })
.then(function(data) {
{data.results.map((key) => console.log(key.gender))}
});
Это не работает — потому что идентификатор формата JSON отличается
fetch('https://jsonplaceholder.typicode.com/users/1')
.then(results => { return results.json(); })
.then(function(data) {
{data.results.map((key) => console.log(key.gender))}
});
Это ошибка, которую я получаю
Неперехваченный (в обещании) Ошибка типа: не удается прочитать свойство ‘map’ неопределенного в
Может кто-нибудь объяснить, как я могу отображать различные типы формата json ЗАРАНЕЕ СПАСИБО
Комментарии:
1. результатом второго запроса на выборку является object и отсутствует свойство ключа gender… итак, воспроизводите результат на основе структуры данных результата….
Ответ №1:
В этом наборе данных нет results
свойства, и это всего лишь один «результат».: https://jsonplaceholder.typicode.com/users/1
Однако нет причин сопоставлять один элемент, если вы используете этот набор данных: https://jsonplaceholder.typicode.com/users/
Вы можете сопоставить это, но по-прежнему нет ни result
свойства в dataset, ни gender
свойства у элементов… итак, вам нужно будет сопоставить data
объект и и существующее свойство … т.е. website
:
fetch('https://jsonplaceholder.typicode.com/users/')
.then(results => { return results.json(); })
.then(function(data) {
{data.map((key) => console.log(key.website))}
});
Комментарии:
1. Большое спасибо, теперь это имеет смысл. В ситуациях, когда я получаю только один результат, как показано в моем коде, как следует обрабатывать код, если он не зациклен / сопоставлен? Должно ли это быть просто извлечено как отдельное свойство и сохранено в переменной или, если в react состояние
2. Что я делаю, когда результаты иногда являются либо единственным числом, либо массивом, это просто проверить, является ли результат массивом или объектом, и просто обернуть его в массив. Не идеально, но это быстрое решение.
3. Классное спасибо 🙂 есть ли какие-либо преимущества обертывания результатов массивом? можно ли их просто оставить как объекты или это прервет функцию сопоставления
4.
map
работает только с массивами, не специально, но обычно массивы состоят из объектов. обертывание одного объекта в массив просто означает, что вы можете передать его через тот же процесс отображения без необходимости создавать другой поток для отдельных результатов