Js как сопоставить различные типы данных Json

#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 работает только с массивами, не специально, но обычно массивы состоят из объектов. обертывание одного объекта в массив просто означает, что вы можете передать его через тот же процесс отображения без необходимости создавать другой поток для отдельных результатов