source

AJAX: 문자열이 JSON인지 확인하시겠습니까?

factcode 2023. 3. 5. 21:58
반응형

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;

화면 1

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

반응형