objeto - string to json javascript
Parse JSON en JavaScript? (16)
Como mencionaron muchos otros, la mayoría de los navegadores admiten JSON.parse
y JSON.stringify
.
Ahora, también me gustaría agregar que si está utilizando AngularJS (que recomiendo encarecidamente), también proporciona la funcionalidad que necesita:
var myJson = ''{"result": true, "count": 1}'';
var obj = angular.fromJson(myJson);//equivalent to JSON.parse(myJson)
var backToJson = angular.toJson(obj);//equivalent to JSON.stringify(obj)
Solo quería agregar las cosas sobre AngularJS para proporcionar otra opción. TENGA EN CUENTA que AngularJS no admite oficialmente Internet Explorer 8 (y versiones anteriores, en realidad), aunque a través de la experiencia, la mayoría de las cosas parecen funcionar bastante bien.
Esta pregunta ya tiene una respuesta aquí:
- Convertir de forma segura una cadena JSON en un objeto 25 respuestas
Quiero analizar una cadena JSON en JavaScript. La respuesta es algo así como
var response = ''{"result":true,"count":1}'';
¿Cómo puedo obtener los valores result
y count
de esto?
El siguiente ejemplo lo dejará claro:
var jsontext = ''{"name":"x","age":"11"}'';
var getContact = JSON.parse(jsontext);
document.write(getContact.name + ", " + getContact.age);
// Output: x, 11
O
También puede utilizar la función eval
. El siguiente ejemplo es usar la función eval
:
var jsontext = ''{"name":"x","age":"11"}'';
var getContact = eval(''('' + jsontext + '')'');
document.write(getContact.name + ", " + getContact.age);
// Output: x, 11
Como la función JSON.parse
es más segura y se ejecuta más rápido que la función eval, le recomiendo que use la función JSON.parse
.
En primer lugar, debe asegurarse de que el código JSON sea válido.
Después de eso, recomendaría el uso de una biblioteca de JavaScript como jQuery o Prototype si puede porque estas cosas se manejan bien en esas bibliotecas.
Por otro lado, si no quiere usar una biblioteca y puede responder por la validez del objeto JSON, simplemente envolvería la cadena en una función anónima y usaría la función eval.
Esto no se recomienda si está obteniendo el objeto JSON de otra fuente que no es absolutamente confiable, ya que la función eval permite el código renegado si así lo desea.
Aquí hay un ejemplo del uso de la función eval:
var strJSON = ''{"result":true,"count":1}'';
var objJSON = eval("(function(){return " + strJSON + ";})()");
alert(objJSON.result);
alert(objJSON.count);
Si controla qué navegador se está utilizando o no le preocupa la gente con un navegador más antiguo, siempre puede usar el método JSON.parse.
Esta es realmente la solución ideal para el futuro.
JSON.parse () convierte cualquier cadena JSON pasada a la función, en un objeto JSON.
Para una mejor comprensión, presione F12 para abrir el elemento Inspeccionar de su navegador, y vaya a la consola para escribir los siguientes comandos:
var response = ''{"result":true,"count":1}''; // Sample JSON object (string form)
JSON.parse(response); // Converts passed string to a JSON object.
Ahora ejecuta el comando:
console.log(JSON.parse(response));
Obtendrá salida como Objeto {resultado: verdadero, cuenta: 1}.
Para usar ese objeto, puede asignarlo a la variable, digamos obj
:
var obj = JSON.parse(response);
Ahora, utilizando obj
y el operador de punto (.) Puede acceder a las propiedades del objeto JSON.
Intenta ejecutar el comando
console.log(obj.result);
La forma más fácil de usar el método parse()
:
var response = ''{"a":true,"b":1}'';
var JsonObject= JSON.parse(response);
Este es un ejemplo de cómo obtener valores:
var myResponseResult = JsonObject.a;
var myResponseCount = JsonObject.b;
La mayoría de los navegadores admiten JSON.parse()
, que se define en ECMA-262 5th Edition (la especificación en la que se basa JavaScript). Su uso es simple:
var json = ''{"result":true,"count":1}'',
obj = JSON.parse(json);
alert(obj.count);
/* or ES6 */
const json = ''{"result":true,"count":1}'' || {};
const { result, count } = JSON.parse(json);
alert(result);
alert(count);
Para los navegadores que no, puede implementarlo utilizando json2.js .
Como se señaló en los comentarios, si ya está utilizando jQuery, hay una función $.parseJSON
que se asigna a JSON.parse
si está disponible o una forma de eval
en navegadores más antiguos. Sin embargo, esto realiza verificaciones adicionales e innecesarias que también son realizadas por JSON.parse
, así que para el mejor desempeño general, recomiendo usarlo así:
var json = ''{"result":true,"count":1}'',
obj = JSON && JSON.parse(json) || $.parseJSON(json);
Esto asegurará que use JSON.parse
nativo de inmediato, en lugar de que jQuery realice comprobaciones de JSON.parse
en la cadena antes de pasarla a la función de análisis nativo.
Pensé que JSON.parse(myObject)
funcionaría. Pero dependiendo de los navegadores, podría valer la pena usar eval(''(''+myObject+'')'')
. El único problema que puedo recomendar es tener cuidado con la lista de niveles múltiples en JSON.
Puedes usar la función eval como en otras respuestas. (No olvide las llaves adicionales). Sabrá por qué cuando profundiza más, o simplemente use la función jQuery parseJSON
:
var response = ''{"result":true , "count":1}'';
var parsedJSON = $.parseJSON(response);
O
Puede utilizar este código a continuación.
var response = ''{"result":true , "count":1}'';
var jsonObject = JSON.parse(response);
Y puede acceder a los campos utilizando jsonObject.result
y jsonObject.count
.
Si desea usar JSON 3 para navegadores más antiguos, puede cargarlo condicionalmente con:
<script>
window.JSON ||
document.write(''<script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.2.4/json3.min.js"><//scr''+''ipt>'');
</script>
Ahora el objeto window.JSON
estándar está disponible para usted sin importar qué navegador esté ejecutando un cliente.
Si obtiene esto de un sitio externo, puede ser útil usar getQSON de jQuery. Si es una lista puedes recorrerla con $ .each
$.getJSON(url, function (json) {
alert(json.result);
$.each(json.list, function (i, fb) {
alert(fb.result);
});
});
Si pasa una variable de cadena (una cadena JSON bien formada) a JSON.parse de MVC @Viewbag que tiene comillas dobles, ''"'', como comillas, debe procesarla antes de JSON.parse ( jsonstring
)
var jsonstring = ''@ViewBag.jsonstring'';
jsonstring = jsonstring.replace(/"/g, ''"'');
Si te gusta
var response = ''{"result":true,"count":1}'';
var JsonObject= JSON.parse(response);
puede acceder a los elementos JSON mediante JsonObject con el punto (.) :
JsonObject.result;
JsonObject.count;
Si usas el kit de herramientas Dojo :
require(["dojo/json"], function(JSON){
JSON.parse(''{"hello":"world"}'', true);
});
Si usas jQuery, es simple:
var response = ''{"result":true,"count":1}'';
var obj = $.parseJSON(response);
alert(obj.result); //true
alert(obj.count); //1
Sin usar una biblioteca, puede usar eval
, la única vez que debe usar. Aunque es más seguro usar una biblioteca.
p.ej...
var response = ''{"result":true , "count":1}'';
var parsedJSON = eval(''(''+response+'')'');
var result=parsedJSON.result;
var count=parsedJSON.count;
alert(''result:''+result+'' count:''+count);
Una forma fácil de hacerlo:
var data = ''{"result":true,"count":1}'';
var json = eval("[" +data+ "]")[0]; // ;)