Kaip patikrinti, ar eilutė yra galiojanti JSON eilutė "JavaScript" nenaudojant Try/Catch

Kažkas panašaus į:

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

//should be true
IsJsonString(jsonString);

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

Sprendime neturėtų būti try/catch. Kai kurie iš mūsų įjungia "break on all errors" ir jiems'nepatinka, kad derintuvas nutrūksta dėl tų negaliojančių JSON eilučių.

Naudokite JSON analizatorių, pavyzdžiui, JSON.parse:

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

PrototipeJS turime metodą isJSON. Galite tai išbandyti. Gali padėti ir json.

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

Norėdami patikrinti, ar ji galioja, galite naudoti "javascript" eval() funkciją.

pvz.

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
}

Arba galite naudoti JSON.parse funkciją iš json.org:

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

if (json) {
  //this is json
}

Tikiuosi, kad tai padės.

ĮSPĖJIMAS: eval() yra pavojinga, jei kas nors prideda kenkėjišką JS kodą, nes jis bus įvykdytas. Įsitikinkite, kad JSON eilutė yra patikima, t. y. gavote ją iš patikimo šaltinio.

Redaguoti Mano 1-ajame sprendime rekomenduojama'tai padaryti.

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

Kad *užtikrintumėte json patikimumą. Jei jsonString nėra grynasis JSON, eval bus išmesta išimtis.

Komentarai (11)