javascript - Jak mohu bezpečně použít JSON.parse na objekt typu string, který může být jednoduchý řetězec nebo objekt typu string?
Potřebuji být schopen analyzovat řetězec ve formátu objektu nebo v prostém řetězcovém formátu. Jaký je nejbezpečnější způsob, jak to udělat?
Zkoušel jsem JSON.parse(data), ale nefunguje to v případě, že data jsou obyčejný řetězec.
UPRAVIT - Vybrané řešení
Díky tobě jsem tento problém vyřešil takto:
try {
dataObj = JSON.parse(data);
} catch (err) {
if (typeof data === "object") {
dataObj = data;
} else {
dataObj = {};
}
}
Odpověď č. 1
Vytvořte si pomocnou funkci a použijte ji.
function parseValue(value) {
try
{
return JSON.parse(value);
}
catch (ex)
{
// JSON format was invalid
// handle errors is you need to
}
return value;
}
Pokud jste dost odvážní, můžete také rozšířit String.prototype, takže jeho volání by se stalo opravdu přímočarým.
String.prototype.parseJSON = String.prototype.parseJSON || function() {
try
{
return JSON.parse(this);
}
catch (ex)
{
// JSON format was invalid
// handle errors is you need to
}
return this;
};
A pak byste to jednoduše nazvali tímto způsobem:
// string in a variable
var s = "Some non-JSON string";
s.parseJSON();
// string literal
'{"b":true,"n":1}'.parseJSON();
Odpověď č. 2
Použijte try catch:
var result;
try {
result = JSON.parse(data);
} catch (err) {
if (typeof data == 'string') result = data;
else console.error(err);
}
