javascript - ¿Cómo puedo usar JSON.parse de manera segura en un objeto string que podría ser una cadena simple o un objeto string?
Necesito poder analizar una cadena en formato de objeto o en un formato de cadena simple. ¿Cuál es la forma más segura de hacerlo?
Intenté JSON.parse(data) pero no funciona en el caso de que data sea una cadena simple.
EDITAR - La solución elegida
Gracias a ti, así es como resolví el problema:
try {
dataObj = JSON.parse(data);
} catch (err) {
if (typeof data === "object") {
dataObj = data;
} else {
dataObj = {};
}
}
Respuesta #1
Créate una función auxiliar y úsala.
function parseValue(value) {
try
{
return JSON.parse(value);
}
catch (ex)
{
// JSON format was invalid
// handle errors is you need to
}
return value;
}
Si eres lo suficientemente valiente, también puedes extender String.prototype para que llamarlo se vuelva realmente sencillo.
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;
};
Y luego simplemente lo llamarías de esta manera:
// string in a variable
var s = "Some non-JSON string";
s.parseJSON();
// string literal
'{"b":true,"n":1}'.parseJSON();
Respuesta #2
Usa try catch:
var result;
try {
result = JSON.parse(data);
} catch (err) {
if (typeof data == 'string') result = data;
else console.error(err);
}
