Hace algún tiempo planeando un proyecto en conjunto con otra desarrolladora surgió el tema de JSON, en ése entonces no lo conocía, así que me dí a la tarea de investigarlo para poder utilizarlo en el proyecto. Aquí lo que aprendí e investigué sobre qué es JSON y con qué se come.
JSON es el acrónimo para JavaScript Object Notation, y aunque su nombre lo diga, no es necesariamente parte de JavaScript, de hecho es un estándar basado en texto plano para el intercambio de información, por lo que se usa en muchos sistemas que requieren mostrar o enviar información para ser interpretada por otros sistemas, la ventaja de JSON al ser un formato que es independiente de cualquier lenguaje de programación, es que los servicios que comparten información por éste método, no necesitan hablar el mismo idioma, es decir, el emisor puede ser Java y el receptor PHP, cada lenguaje tiene su propia librería para codificar y decodificar cadenas de JSON.
¿Cómo se forma una cadena de JSON?
El principio básico es con pares atributo-valor, éstos deben estar encerrados entre llaves { , } que es lo que definen el inicio y el fin del objeto.
Para entender ésto de mejor forma, vamos a formar un objeto JSON para los datos de una persona:
//Ejemplo de JSON para un objeto tipo Persona { "nombre":"Fulano Probencio", "edad":27, "nacionalidad":"Chileno", "altura":"172 cm", "peso":75 }
En el ejemplo formamos un objeto JSON para una persona con sus datos básicos, como son su nombre, edad, nacionalidad, etc. Algo que podrán notar de entrada es que todos los atributos y valores se encierran entre comillas, esto es importante ya que parte del estándar de JSON establece que un atributo debe delimitarse por comillas, lo mismo aplica para sus valores, pero no para todos, pues como notarán, los números pueden no tener comillas, ya que son en sí un valor primitivo aceptado en la mayoría de los lenguajes que interpretan JSON. Lo anterior aplica tanto a números enteros, como decimales, positivos y negativos, buleanos y hasta arreglos y otros objetos. Aunque yo en lo personal cuando debo armar un objeto json, a los valores numéricos acostumbro encerrarlos entre comillas, finalmente la gran mayoría de decodificadores nos respetan el valor como numérico.
Como verán, hasta ahora un objeto JSON no es gran complicación, pero ahora pasaremos a esa parte ya que como mencioné anteriormente, un valor que puede almacenar JSON son arreglos e incluso otros objetos, comencemos primero con un ejemplo de un arreglo, continuemos con el objeto anterior de persona, agreguémosle ahora el atributo pasatiempos, el cual será un listado de hobbies que tiene nuestro amigo Fulano.
{ "nombre":"Fulano Probencio", "edad":27, "nacionalidad":"Chileno", "altura":"172 cm", "peso":75, "pasatiempos":["Polo","Cricket","Ski","Drafting","Gaming"] }
El nuevo atributo pasatiempos tiene como valor un arreglo, pare definir un arreglo, debemos enlistar sus elementos separados por coma y encerrados entre corchetes [ , ], de esta forma creamos un arreglo en JSON, sus valores pueden ser cualquier valor aceptado en JSON y en el lenguaje emisor/receptor (numéricos, textos, buleanos, incluso otros arreglos y otros objetos).
Finalmente, para demostrar otros dos posibles valores aceptados en el formato JSON, vamos a otrogarle a nuestro excéntrico amigo Fulano dos nuevos atributos, uno que sea su dirección, el cual será un objeto con calle, numero y país, y el atributo soltero, que será un buleano para indicar si es casado o no.
{ "nombre":"Fulano Probencio", "edad":27, "nacionalidad":"Chileno", "altura":"172 cm", "peso":75, "pasatiempos":["Polo","Cricket","Ski","Drafting","Gaming"], "soltero":true, "direccion":{ "calle":"Ave. Siempre Viva", "numero":"123", "pais":"México" } }
Con éstos principios podemos comenzar a crear nuestras cadenas de JSON, aunque básicas, ya podríamos interpretarlas y armarlas con cierta facilidad. Algunos editores de código como NetBeans, Dreamweaver, Textpad, etc. tienen incorporados plugins (o se les puede descargar) que nos ayudan a dar formato y validar nuestros objetos JSON, aunque si tienen prisa o no cuentan con ése tipo de herramientas pueden optar por soluciones en línea como JSONLint, un validador de JSON en línea que nos da formato y valida los objetos que ingresemos en su área de texto.
Por último una nota, cuando se manda o recibe un objeto JSON, siempre se maneja un sólo objeto a la vez, es decir, no podemos manejar más de un objeto pegado con otro aunque los separemos por comas, pero sí es posible enviar/recibir un gran objeto JSON que tenga un valor con muchos objetos en su interior, por ejemplo si quisiera enviar varios objetos persona de una sola vez, haría lo siguiente:
{ "personas": [ { "nombre": "Fulano Probencio", "edad": 27, "nacionalidad": "Chileno", "altura": "172 cm", "peso": 75, "pasatiempos": [ "Polo", "Cricket", "Ski", "Drafting", "Gaming" ], "soltero": true, "direccion": { "calle": "Ave. Siempre Viva", "numero": "123", "pais": "México" } }, { "nombre": "Otro Fulano", "edad": 22, "nacionalidad": "Argentino", "altura": "178 cm", "peso": 72, "pasatiempos": [ "Pintar", "Programar", "Scuba Diving" ], "soltero": true, "direccion": { "calle": "Ave. Siempre Viva", "numero": "123", "pais": "México" } }, { "nombre": "Amiga Fulana", "edad": 25, "nacionalidad": "Cubana", "altura": "167 cm", "peso": 55, "pasatiempos": [ "Natación", "Alpinismo", "Cinéfila", "Socializar", "Gaming" ], "soltero": true, "direccion": { "calle": "Cerro del Estudiante", "numero": "456", "pais": "Argentina" } } ] }
Por ahora es todo, recuerden que cualquier duda, comentario o reclamación, pueden usar la zona de comentarios.
Felices sentencias!
mmmm interesante
mmmm interesante
excelente aporte. gracias.
excelente aporte. gracias.
Excelente! Gracias! Muy
Excelente! Gracias! Muy buena la intro!
Muchas gracias, Una
Muchas gracias, Una explicación muy clara y sencilla.
Bastante claro... gracias por
Bastante claro... gracias por el aporte...
Excelente aporte. muchas
Excelente aporte. muchas gracias por la explicacion clara y resumida.
Excelente tuto Gracias!
Excelente tuto Gracias!
Me gusto, y te entendí a la
Me gusto, y te entendí a la perfeccion, sigue asi amigo
el ventilador sabe
el ventilador sabe
lol
lol
impecable, muy claro . muchas
impecable, muy claro . muchas gracias !!
Muy bueno y claro, Muchas
Muy bueno y claro, Muchas Gracias, feliciataciones
Gracias, muy clara la
Gracias, muy clara la explicacion.
Este post me sirvio mucho
Este post me sirvio mucho para conocer mas acerca de la sintaxis de json...muchas gracias
Como puedo hacer el mismo
Como puedo hacer el mismo ejercicio que publicaste pero que los valores donde dicen fulano, chileno, 172cm, etc... lo saque de una base de datos y lo rellene de forma automatica mientras llena la base datos se agrega el valor ej. sexo:masculino .. y eso que se agregue a lo que ya se tiene.. xfa espero su respuesta o si pueden me lo publican a mi correo: tu_gatito_18@hotmail.com
Qué tal Diego, creo que lo
Qué tal Diego, creo que lo que preguntas es cómo formar un JSON de ciertos datos de una BD. Ésto no es tan complicado pero no creo que el espacio de los comentarios sea lo ideal, me has dado una idea para un tutorial ¡gracias!
Bueno, intentando ayudarte:
1- Si estás usando PHP y MySQL puedes obtener toda la información que quieres con un SELECT de MySQL, si estás familiarizado con PDO puedes usar su opción de
fetchObject()
(Más info en: PHP.net)2- Te recomiendo tener un
array()
donde vayas almacenando cada objeto devuelto por la base de datos (siguiendo el ejemplo del artículo, cada row devuelto sería una persona)3- Agregar los headers de PHP para decirle que la salida de nuestro script es tipo JSON:
header('Content-type: application/json');
4- Mandar a imprimir tu arreglo completo con la función de json_encode:
print json_encode($nombreDeTuArreglo)
Con eso puedes obtener siempre un JSON que tenga la información mas reciente ingresada en tu BD. Recuerda que no debes imprimir ninguna otra cosa con éste script de PHP, de lo contrario obtendrías un JSON no válido.
Espero haberte apoyado!
Perfecto
Perfecto
Excelente !!!!
Excelente !!!!
Excelente !!!!
Excelente !!!!
pregunto, lo que viaja hacia
pregunto, lo que viaja hacia el servidor es texto o binario encriptado ? que tan seguro es ?
Es texto plano, como tal
Es texto plano, como tal desconozco si hay forma de encriptar la información que viaja entre cliente-servidor, además de un cifrado SSL o enviar la información cifrada de origen. A lo que voy es que nativamente javascript no tiene ninguna funcionalidad para (des)encriptar la información en JSON
hola clcanela, pregunta ya
hola clcanela, pregunta ya que veo que sabes bastante del tema, que es mejor para aplicaciones web, json o PDO para insertar o actualizar el la base de datos, gracias
Qué tal Nestor, creo que hay
Qué tal Nestor, creo que hay una pequeña confusión, JSON y PDO tienen dos fines distintos: JSON es una notación para compartir información, una representación de datos si lo quieres poner de esa forma, mientras que PDO es un conjunto de librerías para manejo de base de datos que permite homologar algunas llamadas en PHP a distintos drivers/engines de bases de datos. Teniendo eso como base, una aplicación puede manejar su comunicación interna (entre clases, endpoints, instancias, etc.) completamente vía JSON y usar PDO en php para leer y almacenar dichas cadenas JSON, ya que al ser texto plano, es posible guardar objetos complejos en base de datos. No se si con eso aclaro tu duda, realmente son cosas independientes la una de la otra
gracias por responder mi duda
gracias por responder mi duda clcanela, no se si me puedas orientar en esto de librerias y sistemas web, ya que no se mucho y tengo algunas dudas, gracias.
¿Qué dudas en específico
¿Qué dudas en específico tienes?
gracias, he visto ejemplos de
gracias, he visto ejemplos de que en la misma pagina de editar o agregar se pone el código en php de actualizar y en otras paginas código json, donde se tiene otros archivos independientes y hacen los llamados
o te puedo mandar los archivos para que me entiendas lo que trato de decir.
bastante claro,me fue
bastante claro,me fue bastante útil.
alert("hola")
alert("hola")
Saludos, muchas gracias por
Saludos, muchas gracias por tu articulo, realmente tu forma de exponerlo es muy sencilla para entenderlo, y eso dice de tu experiencia para enseñar, que es un don que no todos tenemos.
buf, no es un tema para
buf, no es un tema para profanos.
Excelente información,
Excelente información, gracias por compartir.