Búsqueda de sitios web

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);
}