Kode sisi server saya mengembalikan nilai yang merupakan objek json pada kesuksesan dan string 'false' pada kegagalan. Sekarang bagaimana saya bisa memeriksa apakah nilai yang dikembalikan adalah objek json?
Kode sisi server saya mengembalikan nilai yang merupakan objek json pada kesuksesan dan string 'false' pada kegagalan. Sekarang bagaimana saya bisa memeriksa apakah nilai yang dikembalikan adalah objek json?
Jawaban:
jQuery.parseJSON () harus mengembalikan objek bertipe "object", jika stringnya adalah JSON, jadi Anda hanya perlu memeriksa jenisnya dengan 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
}
}
"SyntaxError: JSON.parse: unexpected character"
kesalahan pengembalian ! , Saya pikir solusi terbaik adalah menggunakan coba / tangkap yang dikatakan Serguei Fedorov
di sini: stackoverflow.com/questions/4295386/…
Solusi yang dipilih sebenarnya tidak berhasil untuk saya karena saya mendapatkan a
"Unexpected Token <"
kesalahan di Chrome. Ini karena kesalahan dilemparkan segera setelah parse ditemukan dan karakter tidak dikenal. Namun, ada jalan lain jika Anda hanya mengembalikan nilai string melalui ajax (yang bisa sangat berguna jika Anda menggunakan PHP atau ASPX untuk memproses permintaan ajax dan mungkin atau mungkin tidak mengembalikan JSON tergantung pada kondisi)
Solusinya cukup sederhana, Anda dapat melakukan hal berikut untuk memeriksa apakah itu pengembalian JSON yang valid
var IS_JSON = true;
try
{
var json = $.parseJSON(msg);
}
catch(err)
{
IS_JSON = false;
}
Seperti yang telah saya katakan sebelumnya, ini adalah solusi jika Anda mengembalikan barang jenis string dari permintaan AJAX Anda atau jika Anda mengembalikan jenis campuran.
false
juga merupakan JSON yang valid). Pertanyaannya hanya tentang satu titik: bagaimana membedakan jika string JSON yang diuraikan adalah boolean false
atau objek
isJSON(someValue)
.
/**
* @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;
}
}
Anda bisa menggunakannya:
var myJson = [{"user":"chofoteddy"}, {"user":"bart"}];
isJSON(myJson); // true
Cara terbaik untuk memvalidasi bahwa suatu objek berjenis JSON atau array adalah sebagai berikut:
var a = [],
o = {};
toString.call(o) === '[object Object]'; // true
toString.call(a) === '[object Array]'; // true
a.constructor.name === 'Array'; // true
o.constructor.name === 'Object'; // true
Namun, secara tegas, array adalah bagian dari sintaks JSON. Oleh karena itu, dua contoh berikut adalah bagian dari respons JSON:
console.log(response); // {"message": "success"}
console.log(response); // {"user": "bart", "id":3}
Dan:
console.log(response); // [{"user":"chofoteddy"}, {"user":"bart"}]
console.log(response); // ["chofoteddy", "bart"]
Jika Anda menggunakan JQuery untuk membawa informasi melalui AJAX. Saya sarankan Anda memasukkan atribut "dataType" dengan nilai "json", dengan cara itu jika Anda mendapatkan JSON atau tidak, JQuery memvalidasinya untuk Anda dan membuatnya dikenal melalui fungsi "berhasil" dan "kesalahan". Contoh:
$.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) {}
});
Jika Anda memiliki jQuery, gunakan isPlainObject .
if ($.isPlainObject(my_var)) {}
true
.
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
Karena itu hanya objek palsu dan json, mengapa Anda tidak memeriksa apakah itu salah, jika tidak, itu pasti json.
if(ret == false || ret == "false") {
// json
}
Saya tahu utas ini sudah dijawab, tetapi datang ke sini tidak benar-benar menyelesaikan masalah saya, saya menemukan fungsi ini di tempat lain. mungkin seseorang yang datang ke sini akan menganggapnya berguna bagi mereka;
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
}
Jika Anda ingin menguji JSON yang valid secara eksplisit (sebagai lawan dari tidak adanya nilai yang dikembalikan false
), Anda dapat menggunakan pendekatan parsing seperti yang dijelaskan di sini .
Saya tidak terlalu suka jawaban yang diterima. Pertama dan terpenting, ini membutuhkan jQuery, yang tidak selalu tersedia atau diperlukan. Kedua, ia melakukan stringifikasi penuh terhadap objek yang menurut saya berlebihan. Berikut adalah fungsi sederhana yang secara menyeluruh mendeteksi apakah suatu nilai mirip JSON, menggunakan tidak lebih dari beberapa bagian pustaka lodash untuk sifat umum .
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
}
Saya bahkan telah meluangkan waktu untuk memasangnya di npm sebagai satu paket: https://npmjs.com/package/is-json-object . Gunakan bersama dengan sesuatu seperti Webpack untuk mendapatkannya di browser.
Semoga ini bisa membantu seseorang!
Saya menggunakan ini untuk memvalidasi Objek JSON
function isJsonObject(obj) {
try {
JSON.parse(JSON.stringify(obj));
} catch (e) {
return false;
}
return true;
}
Saya menggunakan ini untuk memvalidasi String JSON
function isJsonString(str) {
try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}
Anda harus selalu mengembalikan json , tetapi mengubah statusnya , atau dalam contoh berikut properti ResponseCode :
if(callbackResults.ResponseCode!="200"){
/* Some error, you can add a message too */
} else {
/* All fine, proceed with code */
};