Try/Catch kullanmadan JavaScript'te bir dizenin geçerli bir JSON dizesi olup olmadığını kontrol etme

Şöyle bir şey:

var jsonString = '{ "Id": 1, "Name": "Coke" }';

//should be true
IsJsonString(jsonString);

//should be false
IsJsonString("foo");
IsJsonString("<div>foo</div>")

Çözüm try/catch içermemelidir. Bazılarımız "break on all errors" özelliğini açıyor ve bu geçersiz JSON dizelerinde hata ayıklayıcının kırılmasından hoşlanmıyorlar.

JSON.parse` gibi bir JSON ayrıştırıcı kullanın:

function IsJsonString(str) {
    try {
        JSON.parse(str);
    } catch (e) {
        return false;
    }
    return true;
}
Yorumlar (14)

prototypeJS'de isJSON metoduna sahibiz. Bunu deneyebilirsiniz. Hatta json bile yardımcı olabilir.

"something".isJSON();
// -> false
"\"something\"".isJSON();
// -> true
"{ foo: 42 }".isJSON();
// -> false
"{ \"foo\": 42 }".isJSON();
Yorumlar (5)

Geçerli olup olmadığını doğrulamak için javascript eval() işlevini kullanabilirsiniz.

Örneğin.

var jsonString = '{ "Id": 1, "Name": "Coke" }';
var json;

try {
  json = eval(jsonString);
} catch (exception) {
  //It's advisable to always catch an exception since eval() is a javascript executor...
  json = null;
}

if (json) {
  //this is json
}

Alternatif olarak, json.org adresindeki JSON.parse fonksiyonunu kullanabilirsiniz:

try {
  json = JSON.parse(jsonString);
} catch (exception) {
  json = null;
}

if (json) {
  //this is json
}

Umarım bu yardımcı olur.

UYARI: Birisi kötü amaçlı JS kodu eklerse eval() kodu çalıştırılacağından tehlikelidir. JSON Dizesinin güvenilir olduğundan, yani güvenilir bir kaynaktan aldığınızdan emin olun.

Edit 1. çözümüm için bunu yapmanız önerilir.

 try {
      json = eval("{" + jsonString + "}");
    } catch (exception) {
      //It's advisable to always catch an exception since eval() is a javascript executor...
      json = null;
    }

Json-ness'ı garanti altına almak için. Eğer jsonString saf JSON değilse, eval bir istisna fırlatacaktır.

Yorumlar (11)