AJAX: 문자열이 JSON인지 확인하시겠습니까?
내 JavaScript가 다음 행에서 크래시되는 경우가 있습니다.
var json = eval('(' + this.responseText + ')');
크래시는 다음과 같은 인수가 있을 때 발생합니다.eval()
JSON이 아닙니다.이 콜을 발신하기 전에 문자열이 JSON인지 확인할 수 있는 방법이 있습니까?
프레임워크는 사용하고 싶지 않습니다.그냥 사용할 수 있는 방법이 있을까요?eval()
그럴만한 이유가 있어, 약속해
json.org의 JSON 파서를 포함하면 다음과 같이 parse() 함수를 사용하여 try/flash로 랩할 수 있습니다.
try
{
var json = JSON.parse(this.responseText);
}
catch(e)
{
alert('invalid json');
}
그런 건 네가 원하는 대로 할 거야.
그녀의 jQuery 대안은...
try
{
var jsonObject = jQuery.parseJSON(yourJsonString);
}
catch(e)
{
// handle error
}
JSON과의 연재를 위해 javascript JSON 라이브러리를 사용하는 것을 강력히 추천합니다.eval()
는 보안 리스크입니다.이러한 리스크는, 입력이 확실히 소거되어 안전하다고 확신하지 않는 한, 절대로 사용하지 말아 주세요.
JSON 라이브러리가 설치되어 있는 경우 콜을 JSON 라이브러리로 랩핑하기만 하면 됩니다.parse()
비JSON 입력을 처리하기 위한 try/catch-block의 동등한 값:
try
{
var jsonObject = JSON.parse(yourJsonString);
}
catch(e)
{
// handle error
}
이 방법이 도움이 될 수 있습니다.이 코드를 사용하면 데이터를 직접 얻을 수 있습니다.
<!DOCTYPE html>
<html>
<body>
<h3>Open console, please, to view result!</h3>
<p id="demo"></p>
<script>
var tryJSON = function (test) {
try {
JSON.parse(test);
}
catch(err) {
// maybe you need to escape this… (or not)
test = '"'+test.replace(/\\?"/g,'\\"')+'"';
}
eval('test = '+test);
console.debug('Try json:', test);
};
// test with string…
var test = 'bonjour "mister"';
tryJSON(test);
// test with JSON…
var test = '{"fr-FR": "<p>Ceci est un texte en français !</p>","en-GB": "<p>And here, a text in english!</p>","nl-NL": "","es-ES": ""}';
tryJSON(test);
</script>
</body>
</html>
에 의존하는 문제try-catch
어프로치JSON.parse('123') = 123
예외는 없습니다.따라서, 에 가세해try-catch
다음과 같이 유형을 확인해야 합니다.
function isJsonStr(str) {
var parsedStr = str;
try {
parsedStr = JSON.parse(str);
} catch (e) {
return false;
}
return typeof parsedStr == 'object'
}
왜 그냥 반응이 어떤지 확인해주지 않는거죠?그것이 더 효율적이다.
var result;
if (response.headers['Content-Type'] === 'application/json')
result = JSON.parse(this.responseText);
else
result = this.responseText;
jQuery $.ajax()
를 추가합니다.responseJSON
응답 객체에 대한 속성 및 응답이 JSON인지 테스트하려면 다음을 사용합니다.
if (xhr.hasOwnProperty('responseJSON')) {}
JavaScript 타입을 체크하는 작은 라이브러리가 있습니다.is . js
is.json({foo: 'bar'});
=> true
// functions are returning as false
is.json(toString);
=> false
is.not.json([]);
=> true
is.all.json({}, 1);
=> false
is.any.json({}, 2);
=> true
// 'all' and 'any' interfaces can also take array parameter
is.all.json([{}, {foo: 'bar'}]);
=> true
사실.js는 이것보다 훨씬 더 중요한데, 몇 가지 명예로운 언급:
var obj = document.createElement('div');
is.domNode(obj);
=> true
is.error(new Error());
=> true
is.function(toString);
=> true
is.chrome();
=> true if current browser is chrome
언급URL : https://stackoverflow.com/questions/2313630/ajax-check-if-a-string-is-json
'source' 카테고리의 다른 글
Woocommerce에서 ID를 지정한 제품의 모든 제품 버전 가져오기 (0) | 2023.03.05 |
---|---|
MUI에서 가로 아이콘과 텍스트를 정렬하는 방법 (0) | 2023.03.05 |
커스텀 Angular를 사용한 스프링 부트 및 보안JS 로그인 페이지 (0) | 2023.03.05 |
Ajax에서 302 리다이렉트를 처리할 수 없습니다.그 이유는 무엇입니까? (0) | 2023.03.05 |
WordPress 단축코드를 사용하여 태그 추가 (0) | 2023.03.05 |