이것을 다시 한 번 살펴 보겠습니다 (2019+ 이상).
인수 : 값은 같은 true
, false
, null
JSON 유효 (?)
사실 :이 프리미티브 값은 JSON 구문 분석이 가능 하지만 올바르게 구성된 JSON 구조 는 아닙니다 . JSON 사양 은 JSON이 이름 / 값 쌍 (오브젝트) 또는 정렬 된 값 목록 (배열)의 두 가지 구조로 구축되었음을 나타냅니다.
인수 : 예외 처리를 사용하여 예상되는 작업을 수행해서는 안됩니다.
(이것은 25 개 이상의 공감을 가진 의견입니다!)
사실 : 아니요! 특히 이와 같은 경우 try / catch를 사용하는 것이 합법적입니다. 그렇지 않으면 토큰 화 / 정규식 작업과 같은 많은 문자열 분석 작업을 수행해야합니다. 끔찍한 성능을 발휘합니다.
hasJsonStructure()
일부 데이터 / 텍스트에 올바른 JSON 교환 형식이 있는지 확인하는 것이 목표 인 경우에 유용합니다.
function hasJsonStructure(str) {
if (typeof str !== 'string') return false;
try {
const result = JSON.parse(str);
const type = Object.prototype.toString.call(result);
return type === '[object Object]'
|| type === '[object Array]';
} catch (err) {
return false;
}
}
용법:
hasJsonStructure('true') // —» false
hasJsonStructure('{"x":true}') // —» true
hasJsonStructure('[1, false, null]') // —» true
safeJsonParse()
또한 일부 데이터를 JavaScript 값으로 구문 분석 할 때주의해야 할 경우에 유용합니다.
function safeJsonParse(str) {
try {
return [null, JSON.parse(str)];
} catch (err) {
return [err];
}
}
용법:
const [err, result] = safeJsonParse('[Invalid JSON}');
if (err) {
console.log('Failed to parse JSON: ' + err.message);
} else {
console.log(result);
}
eval()
그것이 반환되면 사용 하면undefined
JSON이 아닙니다