program tip

가져 오기 응답이 자바 스크립트의 json 객체인지 확인하는 방법

radiobox 2020. 11. 5. 07:54
반응형

가져 오기 응답이 자바 스크립트의 json 객체인지 확인하는 방법


fetch polyfill을 사용하여 URL에서 JSON 또는 텍스트를 검색하고 있습니다. 응답이 JSON 개체인지 아니면 텍스트 만 있는지 확인하는 방법을 알고 싶습니다.

fetch(URL, options).then(response => {
   // how to check if response has a body of type json?
   if (response.isJson()) return response.json();
});

이 MDN 예제에content-type 표시된대로 응답을 확인할 수 있습니다 .

fetch(myRequest).then(response => {
  const contentType = response.headers.get("content-type");
  if (contentType && contentType.indexOf("application/json") !== -1) {
    return response.json().then(data => {
      // process your JSON data further
    });
  } else {
    return response.text().then(text => {
      // this is text, do something with it
    });
  }
});

콘텐츠가 유효한 JSON인지 절대적으로 확인해야하는 경우 (헤더를 신뢰하지 않음) 항상 응답을 수락하고 text직접 구문 분석 할 수 있습니다.

fetch(myRequest)
  .then(response => response.text())
  .then(text => {
    try {
        const data = JSON.parse(text);
        // Do your JSON handling here
    } catch(err) {
       // It is text, do you text handling here
    }
  });

비동기 / 대기

을 사용하는 경우 async/await보다 선형적인 방식으로 작성할 수 있습니다.

async function myFetch(myRequest) {
  try {
    const reponse = await fetch(myRequest); // Fetch the resource
    const text = await response.text(); // Parse it as text
    const data = JSON.parse(text); // Try to parse it as json
    // Do your JSON handling here
  } catch(err) {
    // This probably means your response is text, do you text handling here
  }
}

JSON.parse와 같은 JSON 파서를 사용합니다.

function IsJsonString(str) {
    try {
        var obj = JSON.parse(str);

         // More strict checking     
         // if (obj && typeof obj === "object") {
         //    return true;
         // }

    } catch (e) {
        return false;
    }
    return true;
}

참고 URL : https://stackoverflow.com/questions/37121301/how-to-check-if-the-response-of-a-fetch-is-a-json-object-in-javascript

반응형