Как я могу получить вложенные элементы массива JSON из API выборки? - PullRequest
1 голос
/ 04 апреля 2019

Я пытаюсь получить некоторые данные с сервера, используя API apch в React Native.Как получить его в формате JSON, где отображаются все поля, включая вложенные?

Я уже пытался преобразовать данные в формат JSON после получения данных из обещания.Однако данные неправильно отформатированы.Извлечение тех же данных с помощью почтальона дает мне все заполненные поля и данные.

Мой API выборки выглядит следующим образом:

fetch("https://someurl.com/apps/api/", {
    method: "GET",
    headers: {
      api_key: "somekey",
      "Content-Type": "application/json"
    },
    params: JSON.stringify({
      device_latitude: deviceLat,
      device_longitude: deviceLong
    })
  })
    .then(response => response.json())
    .then(restData => {
      dispatch({
        type: FETCH_REST,
        payload: restData
      });
    })
    .catch(error => {
      console.error(error);
    });

Это мои данные ответа из API выборки, когда я выполняюконсольный журнал restData в моем редукторе:

[  
   Object {  
      "restID":1,
      "name":"Rest1",
      "restLocation": null
   },
  Object {  
      "restID":2,
      "name":"Rest2",
      "restLocation": null
   }
]

Ниже приведен результат, когда я вызываю конечную точку с помощью Postman.

Примечание: поле restLocation ниже содержит больше данных, которых нет при использовании api fetch, как указано выше:

[  
   {  
      "restID":1,
      "name":"Rest1",
      "restLocation":{  
         "id":2,
         "distance":2
      }
   },
   {  
      "restID":2,
      "name":"Rest2",
      "restLocation":{  
         "id":3,
         "distance":1
      }
   }
]

1 Ответ

1 голос
/ 05 апреля 2019

GET параметры должны быть закодированы в URL и помещены в fetch url.

Например, GET /test с почтальоном PARAMS foo1=bar1 и foo2=bar2 должны отправить GET запрос на /test?foo1=bar1&foo2=bar2.

Мы можем закодировать ваши параметры {device_latitude: deviceLat, device_longitude: deviceLong} следующим образом:

const url = `https://someurl.com/apps/api/?device_latitude=${deviceLat}&device_longitude=${deviceLong}`;
const fetchableUrl = encodeURI(url);

Тогда fetch это так же, но отбросьте params, потому что они принадлежат URL:

fetch(fetchableUrl, {
    method: "GET",
    headers: {
      api_key: "somekey",
      "Content-Type": "application/json"
    }
})
.then(response => response.json())
.then(restData => {
    dispatch({
        type: FETCH_REST,
        payload: restData
    });
})
.catch(error => {
    console.error(error);
});
...