값이 JSON 개체인지 확인하려면 어떻게 해야 합니까?
서버 측 코드는 성공 시 JSON 개체, 실패 시 문자열 'false'false'반환된 값이 JSON 객체인지 확인하려면 어떻게 해야 합니까?
선택한 솔루션이 실제로 기능하지 않는 이유는
"Unexpected Token <"
Chrome 오류입니다.이는 구문 분석과 알 수 없는 문자가 발견되는 즉시 오류가 발생하기 때문입니다.단, Ajax를 통해 문자열 값만 반환하는 경우(PHP 또는 ASPX를 사용하여 Ajax 요청을 처리하고 조건에 따라 JSON을 반환할 수도 있고 반환하지 않을 수도 있음)에는 이 문제를 해결하는 방법이 있습니다.
솔루션은 매우 간단합니다.다음 절차를 수행하여 유효한 JSON 반환 여부를 확인할 수 있습니다.
var IS_JSON = true;
try
{
var json = $.parseJSON(msg);
}
catch(err)
{
IS_JSON = false;
}
앞서 말씀드린 바와 같이, 이것은 AJAX 요청에서 문자열 타입을 반환하는 경우와 혼합 타입을 반환하는 경우의 해결책입니다.
jQuery.parseJSON()은 문자열이 JSON일 경우 "object" 유형의 개체를 반환해야 합니다.따라서 유형을 체크하기만 하면 됩니다.typeof
var response=jQuery.parseJSON('response from server');
if(typeof response =='object')
{
// It is JSON
}
else
{
if(response ===false)
{
// the response was a string "false", parseJSON will convert it to boolean false
}
else
{
// the response was something else
}
}
솔루션 3(가장 빠른 방법)
/**
* @param Object
* @returns boolean
*/
function isJSON (something) {
if (typeof something != 'string')
something = JSON.stringify(something);
try {
JSON.parse(something);
return true;
} catch (e) {
return false;
}
}
사용할 수 있습니다.
var myJson = [{"user":"chofoteddy"}, {"user":"bart"}];
isJSON(myJson); // true
개체가 JSON 유형 또는 배열인지 확인하는 가장 좋은 방법은 다음과 같습니다.
var a = [],
o = {};
솔루션 1
toString.call(o) === '[object Object]'; // true
toString.call(a) === '[object Array]'; // true
솔루션 2
a.constructor.name === 'Array'; // true
o.constructor.name === 'Object'; // true
단, 엄밀히 말하면 어레이는 JSON 구문의 일부입니다.따라서 다음 2가지 예는 JSON 응답의 일부입니다.
console.log(response); // {"message": "success"}
console.log(response); // {"user": "bart", "id":3}
그리고:
console.log(response); // [{"user":"chofoteddy"}, {"user":"bart"}]
console.log(response); // ["chofoteddy", "bart"]
AJAX / JQuery (권장)
JQuery를 사용하여 AJAX를 통해 정보를 가져오는 경우."dataType" 속성에 "json" 값을 입력하는 것이 좋습니다. 이렇게 하면 JSON을 얻을 수 있는지 여부에 관계없이 JQuery가 이를 검증하고 "success" 및 "error" 함수를 통해 알릴 수 있습니다.예:
$.ajax({
url: 'http://www.something.com',
data: $('#formId').serialize(),
method: 'POST',
dataType: 'json',
// "sucess" will be executed only if the response status is 200 and get a JSON
success: function (json) {},
// "error" will run but receive state 200, but if you miss the JSON syntax
error: function (xhr) {}
});
jQuery가 있는 경우 isPlainObject를 사용합니다.
if ($.isPlainObject(my_var)) {}
var checkJSON = function(m) {
if (typeof m == 'object') {
try{ m = JSON.stringify(m); }
catch(err) { return false; } }
if (typeof m == 'string') {
try{ m = JSON.parse(m); }
catch (err) { return false; } }
if (typeof m != 'object') { return false; }
return true;
};
checkJSON(JSON.parse('{}')); //true
checkJSON(JSON.parse('{"a":0}')); //true
checkJSON('{}'); //true
checkJSON('{"a":0}'); //true
checkJSON('x'); //false
checkJSON(''); //false
checkJSON(); //false
그냥 false와 json 오브젝트이기 때문에 false 여부를 확인하고 그렇지 않으면 json이 틀림없습니다.
if(ret == false || ret == "false") {
// json
}
이 스레드가 이미 해결된 것은 알지만, 여기 와서 내 문제를 제대로 해결하지 못하고 다른 곳에서 이 기능을 찾았습니다.여기 오는 누군가가 도움이 될 거예요.
function getClass(obj) {
if (typeof obj === "undefined")
return "undefined";
if (obj === null)
return "null";
return Object.prototype.toString.call(obj)
.match(/^\[object\s(.*)\]$/)[1];
}
var data = 'json string ?';
var jdata = null;
try
{
jdata = $.parseJSON(data);
}catch(e)
{}
if(jdata)
{
//use jdata
}else
{
//use data
}
(반환된 값이 없는 것이 아니라) 유효한 JSON을 명시적으로 테스트하는 경우false)의 경우는, 여기서 설명하는 해석 방법을 사용할 수 있습니다.
나는 받아들여진 대답을 별로 좋아하지 않는다.무엇보다도 jQuery가 필요한데, 항상 사용할 수 있거나 필요한 것은 아닙니다.둘째, 과잉 살상인 대상을 완전히 끈으로 묶습니다.여기에는 범용성을 위해 Lodash 라이브러리의 일부만 사용하여 값이 JSON과 유사한지 여부를 철저히 감지하는 간단한 기능이 있습니다.
import * as isNull from 'lodash/isNull'
import * as isPlainObject from 'lodash/isPlainObject'
import * as isNumber from 'lodash/isNumber'
import * as isBoolean from 'lodash/isBoolean'
import * as isString from 'lodash/isString'
import * as isArray from 'lodash/isArray'
function isJSON(val) {
if (isNull(val)
|| isBoolean(val)
|| isString(val))
return true;
if (isNumber(val))
return !isNaN(val) && isFinite(val)
if (isArray(val))
return Array.prototype.every.call(val, isJSON)
if (isPlainObject(val)) {
for (const key of Object.keys(val)) {
if (!isJSON(val[key]))
return false
}
return true
}
return false
}
pm에 패키지로 올리기까지 시간이 걸렸어요.https://npmjs.com/package/is-json-object웹 팩과 함께 사용하면 브라우저에 가져올 수 있습니다.
이게 누군가에게 도움이 되길 바라!
JSON 오브젝트의 유효성을 확인하기 위해 사용하고 있습니다.
function isJsonObject(obj) {
try {
JSON.parse(JSON.stringify(obj));
} catch (e) {
return false;
}
return true;
}
이것을 사용하여 JSON String을 검증합니다.
function isJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
제가 제시한 답변들을 다 해봤는데, 저한테는 아무 것도 안 먹혀서
jQuery.isEmptyObject()
이 문제를 해결하는 데 도움이 되는 괭이
항상 json을 반환하되 상태를 변경해야 합니다.다음 예제에서는 ResponseCode 속성을 변경해야 합니다.
if(callbackResults.ResponseCode!="200"){
/* Some error, you can add a message too */
} else {
/* All fine, proceed with code */
};
언급URL : https://stackoverflow.com/questions/4295386/how-can-i-check-if-a-value-is-a-json-object
'programing' 카테고리의 다른 글
| AngularJS 응용 프로그램 파일 구조 (0) | 2023.03.31 |
|---|---|
| Angular JS: 약속에 구속하는 방법 (0) | 2023.03.31 |
| Jackson JSON 라이브러리: 추상 필드를 포함하는 클래스를 인스턴스화하는 방법 (0) | 2023.03.31 |
| useEffect in React에서 커스텀 훅을 사용할 수 있습니까? (0) | 2023.03.31 |
| 단일 문자열 값이 유효한 JSON으로 간주됩니까? (0) | 2023.03.31 |