Leer desde JSON

JSON permite enviar y recibir información en forma de texto, con una notación adecuada para poder enviar cualquier tipo de dato.

Los objetos JSON recibidos se pueden leer e interpretar mediante el método JSON.parse(cadena, función).

Es un metodo estático, pues JSON no es un constructor y no existen instancias de este tipo de objetos. Como primer argumento recibe la variable cadena tipo JSON que se decodificará extrayendo los datos que encierra.

Si se desea se puede usar una función opcional como segundo argumento que procesa el valor que devuelve el método parse. Es decir primero se interpreta la cadena y luego se modifica el resultado con esta función opcional. El resultado de la función se agrega al objeto leído.

Una vez interpretada, o decodificada, se accede a cada parte con la misma forma que se accede a objetos javascript por su nombre, nombre[indice] o por nombre.propiedad en caso de objetos

var idiomas_txt;

var idiomas;

idiomas_txt = '["inglés", "francés"]';

idiomas = JSON.parse(idiomas_txt);

console.log( idiomas[0] );     //"inglés"

console.log( idiomas[1] );     //"francés"

console.log(JSON.parse('12E3') )    //12000

console.log(JSON.parse('"12E3"') )      // "12E3"       

Tenemos una cadena con un dato tipo array. El array está encerrado entre comillas simples. Puedes usar cualquier tipo de dato siempre entre comillas simples. Aunque esto no lo vas a hacer a mano nunca, porque disponemos del método stringify() para convertir los datos en cadenas válidas para JSON, pero es ilustrativo.

Pero también se uede usar una función a modo de callback, recibe un par de argumentos: clave y valor de la parte de la cadena que se esté decodificando.

var datos;

var ficha;

datos = '{"nombre":"Juan", "apellido": "Gomez"}';

ficha = JSON.parse(ficha, function(c,v){

    if (typeof(v)=="string"){

           return v.toUpperCase() }

    else {return v}

   });

console.log(ficha.nombre);      // JUAN

console.log(ficha.apellido);      // GOMEZ

  

En este ejemplo se usa un dato que codifica un objeto con dos propiedades. El método parse() va a recorrer la variable con la información desde el nivel inferior

  1. Encuentra nombre: "Juan", convierte Juan a mayúsculas
  2. Encuentra apellido:"Gomez", convierte Gomez a mayúsculas
  3. Pasa al nivel superior: objeto, lo devuelve
  4. Ya no hay más y finaliza

Este el mecanismo del parser de forma muy esquemática. Normalmente es más práctico decodificar la cadena y luego hacer las modificaciones oportunas.