JSON (JavaScript Object Notation) es un formato ligero que se utiliza para el intercambio de datos. Se basa en un subconjunto de lenguaje JavaScript (la forma en que los objetos se crean en JavaScript). Como se indica en el MDN , algunos JavaScript no son JSON, y algunos JSON no son JavaScript.
Un ejemplo de dónde se usa esto son las respuestas de servicios web. En los viejos tiempos, los servicios web usaban XML como su formato de datos principal para transmitir datos, pero desde que apareció JSON ( el formato JSON se especifica 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 idiomas, esto se realiza como una matriz, vector, lista o secuencia.
Estructura JSON
Aquí hay 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 a menudo asume que todos los objetos Javascript son JSON y que JSON es un objeto Javascript. Esto es incorrecto.
En Javascript novar x = {x:y}
es JSON , este es un objeto 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 en sí mismo. Para convertir esto en un objeto Javascript completo, primero debe analizarlo var x = JSON.parse('{"x":"y"}');
, x
ahora es un objeto pero ya no es JSON.
Ver objeto Javascript Vs JSON
Al trabajar con JSON y JavaScript, puede tener la tentación de usar 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, uno siempre debe intentar usar el script de Crockford que verifica 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 js. Cada navegador importante hoy en día tiene su propia implementación para esto.
Ejemplo sobre cómo usar 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 devuelve una cadena con formato JSON. Esto es útil para cuando desea enviar datos de vuelta 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 invocará 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 los que piensan que JSON es solo para JavaScript, consulte esta publicación que explica y confirma lo contrario.
Referencias