¿Qué es JSON y para qué sirve?
Busqué en Wikipedia, busqué en Google y leí la documentación oficial, pero todavía no he llegado al punto en el que realmente entiendo qué es JSON y por qué lo usaría.
He estado creando aplicaciones usando PHP, MySQL y JavaScript/HTML por un tiempo, y si JSON puede hacer algo para hacerme la vida más fácil o mejorar mi código o mi interfaz de usuario, entonces me gustaría saberlo. ¿Qué es una explicación sucinta?
JSON (Notación de objetos JavaScript) es un formato ligero que se utiliza para el intercambio de datos. Se basa en un subconjunto del lenguaje JavaScript (la forma en que se crean los objetos en JavaScript). Como se indica en MDN , algunos JavaScript no son JSON y otros JSON no son JavaScript.
Un ejemplo de dónde se utiliza esto son las respuestas de servicios web. En los "viejos" tiempos, los servicios web utilizaban XML como formato de datos principal para transmitir datos, pero desde que apareció JSON ( el formato JSON está especificado en RFC 4627 por Douglas Crockford ), ha sido el formato preferido porque es mucho más ligero
Puede encontrar mucha más información en el sitio web oficial de JSON .
JSON se basa en dos estructuras:
- Una colección de pares de nombre/valor. En varios idiomas, esto se realiza como un objeto, registro, estructura, diccionario, tabla hash, lista con clave o matriz asociativa.
- Una lista ordenada de valores. En la mayoría de los lenguajes, esto se realiza como una matriz, un vector, una lista o una secuencia.
Estructura JSON
A continuación se muestra un ejemplo de datos JSON:
{
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
JSON en JavaScript
¡JSON (en JavaScript) es una cadena!
La gente suele asumir que todos los objetos JavaScript son JSON y que JSON es un objeto JavaScript. Esto es incorrecto.
En JavaScript, no var x = {x:y}
es JSON , es un objeto de JavaScript . Los dos no son lo mismo. El equivalente JSON (representado en el lenguaje JavaScript) sería var x = '{"x":"y"}'
. x
es un objeto de tipo cadena , no un objeto por derecho propio. Para convertir esto en un objeto JavaScript completo, primero debe analizarlo. var x = JSON.parse('{"x":"y"}');
Ahora x
es un objeto, pero ya no es JSON.
Ver Objeto JavaScript versus JSON
Cuando trabaje con JSON y JavaScript, puede tener la tentación de utilizar la eval
función para evaluar el resultado devuelto en la devolución de llamada, pero esto no se sugiere ya que hay dos caracteres (U+2028 y U+2029) válidos en JSON pero no en JavaScript. (lea más de esto aquí ).
Por lo tanto, siempre se debe intentar utilizar el script de Crockford que comprueba si hay un JSON válido antes de evaluarlo. El enlace a la explicación del script se encuentra aquí y aquí hay un enlace directo al archivo JavaScript. Cada navegador importante hoy en día tiene su propia implementación para esto.
Ejemplo de cómo utilizar el analizador JSON (con el JSON del fragmento de código anterior):
// The callback function that will be executed once data is received from the server
var callback = function (result) {
var johnny = JSON.parse(result);
// Now, the variable 'johnny' is an object that contains all of the properties
//from the above code snippet (the JSON example)
alert(johnny.firstName + ' ' + johnny.lastName); // Will alert 'John Smith'
};
El analizador JSON también ofrece otro método muy útil, stringify
. Este método acepta un objeto JavaScript como parámetro y genera una cadena con formato JSON. Esto es útil cuando desea enviar datos al servidor:
var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
// The above method will output this: {"name":"Andreas","surname":"Grech","age":20}
Los dos métodos anteriores ( parse
y stringify
) también toman un segundo parámetro, que es una función que se llamará para cada clave y valor en cada nivel del resultado final, y cada valor será reemplazado por el resultado de su función ingresada. (Más sobre esto aquí )
Por cierto, para todos aquellos que piensan que JSON es solo para JavaScript, consulten esta publicación que explica y confirma lo contrario.
Referencias
- JSON.org
- Wikipedia
- Json en 3 minutos (Gracias mson )
- Usando JSON con Yahoo! Servicios web (Gracias gljivar )
- Convertidor de JSON a CSV
- Convertidor alternativo de JSON a CSV
- JSON Lint (validador JSON)
El concepto explicado: sin código ni jerga técnica
¿Qué es JSON? – Cómo se lo expliqué a mi esposa TM
Yo: “Es básicamente una forma de comunicarse con alguien por escrito... pero con reglas muy específicas.
Esposa: si....?
Yo: En inglés prosaico, las reglas son bastante vagas: como en las peleas en jaula. No es así con JSON. Hay muchas formas de describir algo:
• Ejemplo 1: Nuestra familia tiene 4 personas: tú, yo y 2 niños.
• Ejemplo 2: Nuestra familia: tú, yo, niño1 y niño2.
• Ejemplo 3: Familia: [tú, yo, niño1, niño2]
• Ejemplo 4: tenemos 4 personas en nuestra familia: mamá, papá, niño1 y niño2.
Esposa: ¿Por qué no usan un inglés sencillo?
Yo: Lo harían, pero recuerda que estamos tratando con computadoras. Una computadora es estúpida y no podrá entender oraciones. Así que debemos ser muy específicos cuando se trata de computadoras, de lo contrario se confundirán. Además, JSON es una forma bastante eficiente de comunicarse, por lo que la mayoría de las cosas irrelevantes se eliminan, lo cual es bonito. Si quisieras comunicar nuestra familia a una computadora, una forma de hacerlo es así:
{
"Family": ["Me", "Wife", "Kid1", "Kid2"]
}
……y eso es básicamente JSON. Pero recuerda, DEBES obedecer las reglas gramaticales de JSON. Si infringe esas reglas, entonces una computadora simplemente no entenderá (es decir, no analizará) lo que está escribiendo.
Esposa: Entonces, ¿cómo escribo en Json?
Una buena forma sería utilizar un serializador json, que es una biblioteca que hace el trabajo pesado por usted.
Resumen
JSON es básicamente una forma de comunicar datos a alguien, con reglas muy, muy específicas. Uso de matrices y pares clave-valor. Este es el concepto explicado, en este punto vale la pena leer las reglas específicas anteriores.
En resumen, JSON es una forma de serializar de tal manera que se convierte en código JavaScript. Cuando se ejecuta (con eval o de otro modo), este código crea y devuelve un objeto JavaScript que contiene los datos que serializó. Esto está disponible porque JavaScript permite la siguiente sintaxis:
var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
'StringProperty' : 'Value',
'IntProperty' : 12,
'ArrayProperty' : [ 1, 2, 3],
'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.
Puede utilizar esto para varios propósitos. Por un lado, es una forma cómoda de pasar datos desde el backend de su servidor a su código JavaScript. Por lo tanto, esto se usa a menudo en AJAX.
También puede utilizarlo como mecanismo de serialización independiente, que es más sencillo y ocupa menos espacio que XML. Existen muchas bibliotecas que le permiten serializar y deserializar objetos en JSON para varios lenguajes de programación.