다음과 같은 것 :
var jsonString = '{ "Id": 1, "Name": "Coke" }';
//should be true
IsJsonString(jsonString);
//should be false
IsJsonString("foo");
IsJsonString("<div>foo</div>")
솔루션에는 try / catch가 포함되어서는 안됩니다. 우리 중 일부는 “모든 오류 발생”을 설정하고 디버거가 잘못된 JSON 문자열을 중단하는 것을 좋아하지 않습니다.
답변
먼저 코멘트. 질문은를 사용하지 않는 것에 관한 것 try/catch
입니다.
사용하지 않으려면 아래 답변을 읽으십시오. 여기서는 JSON
정규 표현식을 사용하여 문자열을 확인하면 모든 경우가 아니라 대부분의 경우 작동합니다.
https://github.com/douglascrockford/JSON-js/blob/master/json2.js 에서 450 줄을 둘러보십시오.
유효한 JSON을 확인하는 정규 표현식이 있습니다.
if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
//the json is ok
}else{
//the json is not ok
}
편집 : json2.js의 새로운 버전은 위의 것보다 더 고급 구문 분석을 수행하지만 여전히 정규 표현식 대체를 기반으로합니다 ( @Mrchief 의 의견에서 )
답변
다음과 같은 JSON 파서를 사용하십시오 JSON.parse
.
function IsJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
답변
나는이 질문에 3 년 늦었다는 것을 안다.
Gumbo의 솔루션은 훌륭하게 작동하지만 예외가 발생하지 않는 몇 가지 경우를 처리하지 않습니다. JSON.parse({something that isn't JSON})
또한 구문 분석 된 JSON을 동시에 반환하는 것을 선호하므로 호출 코드는 JSON.parse(jsonString)
두 번째 호출 할 필요가 없습니다 .
이것은 내 요구에 잘 맞는 것 같습니다.
function tryParseJSON (jsonString){
try {
var o = JSON.parse(jsonString);
// Handle non-exception-throwing cases:
// Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,
// but... JSON.parse(null) returns null, and typeof null === "object",
// so we must check for that, too. Thankfully, null is falsey, so this suffices:
if (o && typeof o === "object") {
return o;
}
}
catch (e) { }
return false;
};
답변
// vanillaJS
function isJSON(str) {
try {
return (JSON.parse(str) && !!str);
} catch (e) {
return false;
}
}
사용법 : isJSON({})
것 false
, isJSON('{}')
될 것입니다 true
.
무언가가 ( 구문 분석 된 JSON) Array
인지 확인하려면 다음을 수행하십시오 .Object
// vanillaJS
function isAO(val) {
return val instanceof Array || val instanceof Object ? true : false;
}
// ES2015
var isAO = (val) => val instanceof Array || val instanceof Object ? true : false;
사용법 : isAO({})
것 true
, isAO('{}')
될 것입니다 false
.
답변
여기 내 작업 코드 :
function IsJsonString(str) {
try {
var json = JSON.parse(str);
return (typeof json === 'object');
} catch (e) {
return false;
}
}
답변
문자열이 유효한 JSON인지 여부를 확인하는 간단한 방법을 사용했습니다.
function testJSON(text){
if (typeof text!=="string"){
return false;
}
try{
JSON.parse(text);
return true;
}
catch (error){
return false;
}
}
유효한 JSON 문자열이있는 결과 :
var input='["foo","bar",{"foo":"bar"}]';
testJSON(input); // returns true;
간단한 문자열로 결과;
var input='This is not a JSON string.';
testJSON(input); // returns false;
객체 결과 :
var input={};
testJSON(input); // returns false;
널 입력 결과 :
var input=null;
testJSON(input); // returns false;
널 변수의 유형이 오브젝트이므로 마지막 값은 false를 리턴합니다.
이것은 매번 작동합니다. 🙂
