Crear cadenas JSON
Una cadena de datos con notación JSON se puede crear a mano, mediante una expresión, pero es más práctico y seguro hacerlo con el método stringify().
Este método es un método estático, es decir que se usa con JSON como prefijo y usa al menos un argumento, el dato que se desea convertir en notación JSON.
Además puede recibir dos argumentos opcionales:
- Función o array para interceptar el proceso de conversión
- Espacio o número de espacios que se insertarán en la cadena para mejorar la legiblidad.
Como resultado tenemos una cadena JSON que puede usarse para comunicarlo a otro sistema o para almacenar información, etc.
var dato = {nombre: "Juan", apellidos:"Pérez Pérez"};
var datoJson;
datoJson = JSON.stringify(dato);
console.log(datoJson);
dato = ["Pedro", "María", "Luisa"];
console.log(JSON.stringify(dato) );
console.log(JSON.stringify({fruta:"Manzana", precio:1.23}) );
Como ves no tiene ninguna dificultad. Cualquier dato puede ser re codificado con la sintáxis de JSON para así emplearlo en cualquier contexto que requiera intercambio de datos.
Si queremos que el formato de salida sea más legible, con saltos de línea y espacios entre datos se puede usar el tercer argumento, que puede ser un carácter o un número de espacios. Esto introduce un salto de linea y el caracter para presentar los datos en diferentes lineas
var dato = {nombre: "Juan", apellidos:"Pérez Pérez"};
var datoJson;
datoJson = JSON.stringify(dato,null, 3);
console.log(datoJson);
En este ejemplo los datos se presentan en dos lineas indentadas con tres espacios. El argumento null es necesario si no se usa la función.
var lista = ["Francés","Inglés","Árabe"];
var listaJson;
datoJson = JSON.stringify(lista,null, "->");
console.log(datoJson);
En este otro ejemplo cada idioma de la lista de idiomas se presenta en diferentes lineas precedidas por los caracteres ->
El segundo argumento de este método, conocido a veces como replacer, es una función o un array. Básicamente lo que salga de esta función o array es lo que se incorpora a la cadena convertida.
Veamos el más fácil, el array. Es una lista con nombres de propiedades del objeto a convertir, solo estas propiedades se añaden a la cadena JSON final:
var lista = {idioma: "Francés", profesor: "Luis", dia: "Lunes"};
var listaJson;
listaJson = JSON.stringify(lista,['idioma', 'dia'], 4);
console.log(listaJson);
Como ves solo dos campos del objeto se han incorporado a la cadena JSON, el campo profesor y el campo día.
Si se usa una función replacer esta recibe dos argumentos: clave y valor, y devuelve lo que se quiera incorporar en la cadena de datos JSON . La función lo que hace básicamente es reemplazar el valor que vaya a incorporarse a la cadena JSON por otro: número, cadena, lógico. Si devuelve undefined la propiedad no se agrega a la cadena, otros valores se asignan a la clave que se esté convirtiendo.
function reemplazo(c,v)
{
if (v <5)
return 0
else
return v
};
var lista = [2,4,1,6,7,0,9,0,4]
var cadLista = JSON.stringify(lista, reemplazo)
console.log(cadLista);
En este ejmplo los valores por debajo de 5 se ponen a cero y los otros se mantienen. No es posible eliminar elementos del array, solo cambiarlo.
Y para el caso más habitual, un objeto podría valer este ejmeplo en el que se elimina una de las propiedades.
function reemplazo(c,v)
{
if (v == 'dia')
return undefined
else
return v
};
var lista = {idioma: 'Frances', Profesor: 'Juan', dia:'Lunes'}
var cadLista = JSON.stringify(lista, reemplazo, '')
console.log(cadLista);
Como ves se comprueba el valor de la propiedad en caso de que sea dia, pues devuelve undefined, y no se agrega a la cadena.