SlideShare una empresa de Scribd logo
1 de 17
EL FORMATO JSON
Ya sabemos que un aspecto principal de la tecnología Ajax es el intercambio de datos. Sabemos igualmente que
podemos recuperar datos en formatos no estandarizados (por ejemplo datos contenidos en un fichero php) pero
que resulta más ventajoso el uso de formatos estándar como XML. JSON es otro formato estándar para datos que
destaca por ser ligero y rápido.
DE XML A JSON: PRIMERA APROXIMACIÓN
Al igual que XML define un formato para el intercambio de datos, JSON define otro formato. El formato JSON se
basa en pares atributo-valor.
Un ejemplo de dato en formato JSON y su equivalente en XML puede ser el siguiente:
Formato JSON Formato XML
{
"nombre": "Juan",
"apellidos": "Suárez
Iglesias",
"edad": 25,
"direccion": {
"calle_y_num": "Acacias,
nº34",
"ciudad": "Valencia",
"codigo_postal": "43005",
"pais": "Colombia",
},
"telefono": [
{
"tipo": "fijo",
"numero":
"0034966432134"
},
{
"tipo": "móvil",
"numero":
"0034677493826"
}
]
}
<?xml version="1.0" encoding="UTF-8"
?>
<nombre>Juan</nombre>
<apellidos>Suárez Iglesias</apellidos>
<edad>25</edad>
<direccion>
<calle_y_num>Acacias,
nº34</calle_y_num>
<ciudad>Valencia</ciudad>
<codigo_postal>43005</codigo_postal>
<pais>Colombia</pais>
</direccion>
<telefono>
<tipo>fijo</tipo>
<numero>0034966432134</numero>
</telefono>
<telefono>
<tipo>móvil</tipo>
<numero>0034677493826</numero>
</telefono>
En este ejemplo vemos algunas de las características de JSON. Un elemento de datos (unidad básica de
intercambio de información u objeto JSON) queda delimitado por llaves { … }. En este ejemplo las llaves externas
delimitarían los datos de una persona.
Un elemento de datos JSON contiene pares de elementos "nombre": "valor" con la peculiaridad de que valor
puede ser tanto una cadena de texto entrecomillada como otras cosas como explicaremos a continuación.
JSON: HISTORIA Y ESPECIFICACIÓN OFICIAL
A finales de los años 90 XML era el formato para intercambio de datos con mayor implantación. No obstante,
presentaba problemas sobre todo cuando se trataba de trabajar con ficheros con gran volumen de datos donde el
procesamiento se volvía lento.
Surgieron entonces intentos para definir formatos que fueran más ligeros y rápidos para el intercambio de
información. Uno de ellos fue JSON, promovido y popularizado por Douglas Crockford y sus colaboradores a
principios de los años 2000.
JSON se caracteriza por reducir el tamaño de los archivos y el volumen de datos que es necesario transmitir
frente a otros estándares como XML. Por ello JSON fue adquiriendo popularidad hasta convertirse en un estándar.
Esto no significa que XML haya dejado de utilizarse. En la actualidad se utiliza tanto XML como JSON para el
intercambio de datos. Utilizar uno u otro depende de las circunstancias y de las preferencias que en cada
momento se determinen.
Hoy día JSON cuenta con un sitio web oficial (http://json.org) y una especificación oficial producida por ECMA
International, el mismo organismo encargado de la especificación oficial de JavaScript. La especificación oficial de
JSON, publicada por primera vez en 2013 con el nombre de “Standard ECMA -404 The JSON Data Interchange
Format” puede consultarse en la web de Ecma International (http://www.ecma-
international.org/publications/files/ECMA-ST/ECMA-404.pdf).
Aunque en sus orígenes JSON estuvo ligado a JavaScript, y de hecho su notación puede decirse que está
inspirada en la notación de objetos JavaScript, con el tiempo se ha convertido en un estándar independiente de
datos, no ligado a ningún lenguaje en concreto, de la misma forma que xml no está ligado a ningún lenguaje en
concreto.
Al igual que un fichero xml es un fichero de texto, un fichero json también lo es.
JSON: LENGUAJES CON SOPORTE
Con el tiempo prácticamente todos los lenguajes de programación han introducido soporte para el intercambio de
datos basado en JSON. En este listado podemos ver algunos de los lenguajes o entornos con soporte para JSON
y los nombres de sus librerías, extensiones o utilidades dedicadas a JSON:
ABAP: EPO Connector.
ActionScript: ActionScript3 ,
JSONConnector.
Ada: GNATCOLL , JSON.
AdvPL: JSON-ADVPL.
ASP: JSON for ASP , JSON ASP utility
class.
JavaScript: JSON , json2 , js , clarinet ,
Oboe , js.
LabVIEW: i3-JSON , LAVA JSON ,
Lisp: Common Lisp JSON , Yason , Emacs
Lisp.
LiveCode: mergJSON ,
LotusScript: JSON LS.
AWK: JSON , awk , rhawk.
Bash: Jshon , JSON , sh.
BlitzMax: bmx-rjson.
C: JSON_checker , YAJL , js0n , LibU ,
json-c , json-parser , jsonsl , WJElement , M's
JSON parser , cJSON , Jansson , jsmn , cson ,
parson , ujson4c , nxjson , frozen , microjson.
C++: JSONKit , jsonme-- , ThorsSerializer ,
JsonBox , jvar , rapidjson , jsoncons , json ,
JSON Support in Qt , QJson , qmjson ,
jsoncpp , zoolib , JOST , CAJUN , libjson ,
nosjob , JSON++ , SuperEasyJSON ,
Casablanca , JSON library for IoT , minijson.
C#: fastJSON , JSON_checker , Jayrock ,
Json , NET - LINQ to JSON , LitJSON ,
JSON for , NET , JsonFx ,
JSON@CodeTitans , How do I write my own
parser? , JSONSharp , JsonExSerializer ,
fluent-json , Manatee Json , FastJsonParser
Ciao: Ciao JSON encoder and decoder.
Clojure: data , json.
Cobol: XML Thunder.
ColdFusion: SerializeJSON , toJSON.
D: Cashew , Libdjson
Dart: json library.
Delphi: Delphi Web Utils , JSON Delphi
Library , tiny-json.
E: JSON in TermL.
Erlang: mochijson2.
Fantom: Json.
FileMaker: JSON.
Fortran: json-fortran , YAJL-Fort.
Go: package json.
Groovy: groovy-io
Haskell: RJson package , json package
Java: JSON-java , JSONUtil , Jackson JSON
Processor , jsonp , Json-lib , JSON Tools ,
Stringtree , SOJO , Jettison , json-taglib ,
XStream , Flexjson , JON tools , Argo , jsonij
, fastjson , mjson , jjson , json-simple , json-
io , JsonMarshaller , google-gson , Json-
smart , FOSS Nova JSON , Corn
CONVERTER , Apache johnzon
LPC: Grimoire: LPC JSON.
Lua: JSON Modules.
M: DataBallet.
Matlab: JSONlab , 20565 , 23393.
Net.Data: netdata-json.
Objective C: NSJSONSerialization , json-
framework , JSONKit , yajl-objc ,
TouchJSON , ObjFW.
OCaml: Yojson , jsonm.
OpenLaszlo: JSON.
PascalScript: JsonParser.
Perl: CPAN , perl-JSON-SL.
Photoshop: JSON Photoshop Scripting
PHP: PHP 5 , 2 , json , Services_JSON ,
Zend_JSON , Comparison of php json
libraries.
PicoLisp: picolisp-json.
Pike: Public , Parser , JSON , Public , Parser ,
JSON2.
PL/SQL: pljson: Librairie-JSON.
PowerShell: PowerShell.
Prolog: SWI-Prolog HTTP support.
Puredata: PuRestJson
Python: The Python Standard Library ,
simplejson , pyson , Yajl-Py , ultrajson ,
metamagic , json
R: rjson , jsonlite.
Racket: json-parsing.
Rebol: json , r.
RPG: JSON Utilities
Ruby: json , yajl-ruby , json-stream , yajl-ffi.
Scala: package json.
Scheme: MZScheme , PLT Scheme.
Squeak: Squeak.
Symbian: s60-json-library.
Tcl: JSON.
Visual Basic: VB-JSON , PW , JSON
Visual FoxPro: fwJSON , JSON , vfpjson.
JSON: ESPECIFICACIÓN FORMAL
La especificación formal de JSON es relativamente simple.
Gráficamente se define con las siguientes figuras.
Figura 1: un objeto JSON está formado por uno o varios pares string: value (cadena:valor)
Figura 2: un valor en JSON puede ser un string (cadena), un número, un objeto JSON, un array, el valor true, el
valor false o el valor null.
Figura 3: un array o arreglo en JSON está formado por valores delimitados entre corchetes y separados por
comas.
Figura 4: una cadena JSON queda formada de forma análoga a como se forma en muchos lenguajes de
programación. Determinados caracteres han de usar una secuencia de escape.
Figura 5: un número JSON queda formado de forma análoga a como se forma en muchos lenguajes de
programación.
---4
JSON es un lenguaje usado para el intercambio de datos entre
sistemas, está basado en la notación de los literales de objeto de
Javascript.
JSON son las siglas de JavaScript Object Notation, o sea, Notación
de Objeto Javascript. Básicamente usa la misma notación o forma
con la que se escriben los objetos Javascript en el código, los
literales de objeto, con algunas restricciones y añadidos extra.
La utilidad de JSON es la de intercambiar datos, por eso se conoce
como lenguaje de intercambio de información o lenguaje de
transporte. Sirve para la comunicación entre servicios web (web
services) y los clientes que los consumen, enviándo y recibiendo la
información en formato JSON.
Características de JSON
 JSON es un lenguaje de modelador de datos
 Consiste en pares "clave - valor"
 Los valores pueden cadenas, números o boleanos, así como
otros objetos JSON, con cualquier nivel de anidación
 Es un formato flexible, ligero y fácilmente transferible a través
de las redes
Ventajas de JSON
 La lectura del código resulta de fácil lectura y la información
es suficienteme expresiva para poder ser leída por personas,
además de máquinas.
 El tamaño de los archivos que se transfieren es ligero.
 El código está basado en el lenguaje Javascript, lo que es ideal
para las aplicaciones web.
 Todos los lenguajes disponen de funciones para interpretar
cadenas JSON y convertir datos en cadenas JSON válidas.
 Se escribe en archivos de texto plano con codificación UTF8,
que es compatible con todos los sistemas.
Estas ventajas son especialmente interesantes en el entorno web, ya
que Javascript es el lenguaje de programación para frontend y el
código es directamente entendible por cualquier sistema que soporte
Javascript. Esta facilidad de procesamiento del JSON y su ligereza
para la transmisión lo hacen ideal como formato de intercambio de
información y por eso es ampliamente usado, mucho más que otras
alternativas como podría ser el lenguaje XML. Por estos motivos, la
mayoría de los servicios web que se construyen para ser consumidos
por clientes web se implementan bajo JSON.
Para qué se usa el JSON
JSON es un lenguaje para representar datos, con la sintaxis propia de
los literales de objetos Javascript. Sus usos son varios, pero
principalmente serían los siguientes:
 Compartir y transferir información entre distintos sistemas de
software.
 Almacenar información en sistemas de persistencia.
Compartir información entre sistemas
El hecho de que JSON se representa en archivos de texto plano hace
muy fácil su transferencia entre sistemas informáticos, usando
protocolos ampliamente extendidos como HTTP.
Por tanto, JSON es un lenguaje habitualmente usado para transferir
datos entre aplicaciones. En Internet el uso más importante es el de
generar datos en el backend y enviarlos a las aplicaciones frontend.
El flujo sería el siguiente:
1. Las aplicaciones frontend requieren datos para representar al
usuario.
2. Mediante Javascript realizan solicitudes HTTP a un endpoint
(URL) en el backend. Estas solicitudes se realizan de manera
asíncrona mediante Ajax.
3. El backend recibe la solicitud sobre el dato que se requiere
desde el frontend, o la operación que se desea realizar
(ediciones, inserciones, etc.)
4. El backend realiza la operación, enviando el resultado al
frontend en formato JSON.
5. El frontend recibe el JSON y generalmente construye mediante
Javascript el HTML necesario para representar esa información
convenientemente al usuario.
Este flujo es el que se realiza en los servicios web o APIs, que
encontramos habitualmente en las aplicaciones web modernas.
Dentro del esquema MVC, desde el punto de vista del backend el
JSON sería la vista. Mientras que en la aplicación frontend el JSON
sería el modelo. Este JSON también se conoce con el nombre de DTO
(Data Transfer Object) en estas arquitecturas de aplicaciones.
Almacenar información en bases de datos
Además de las bases de datos relacionales, que almacenan la
información en tablas, existen actualmente otras bases de datos
llamadas NoSQL o simplemente no relacionales, que almacenan los
datos en formato JSON o alguna variante o extensión de este
formato.
En estas bases de datos generalmente se tienen colecciones de
elementos, como si fueran arrays, y en cada colección se almacenan
objetos, que tienen una representación directa en JSON. Ejemplos
de estas bases de datos serían MongoDB, CouchDB, Base de datos en
tiempo real de Firebase, etc.
Actualmente también bases de datos relacionales como MySQL,
Oracle o PostgreSQL soportan el almacenamiento de JSON. Es decir,
tienen tipos de datos JSON que son capaces de entender y procesar
como objetos.
EDITAR
Ejemplo de código JSON
Aquí podemos ver un ejemplo de un código en formato JSON.
{
"nombre":"Jonh Doe",
"profesion":"Programador",
"edad":25,
"lenguajes":["PHP","Javascript","Dart"],
"disponibilidadParaViajar":true,
"rangoProfesional": {
"aniosDeExperiencia": 12,
"nivel": "Senior"
}
}
Los archivos JSON pueden tener cualquier nivel de anidación que sea
necesario, ya que podemos colocar unos objetos dentro de otros,
creando un árbol de datos de cualquier profundidad.
EDITAR
Reglas de sintaxis en JSON
Los archivos en formato JSON tienen las mismas reglas de sintaxis del
lenguaje Javascript. Pero además necesitan cumplir algunas normas
adicionales, que no son necesarias en los literales de objeto
Javascript:
Estructuras disponibles
En JSON podemos estructurar los datos de dos maneras distintas,
como arrays y objetos. Todos los archivos de JSON representan una
de estas dos estructuras:
1. On objeto, es decir, una lista de pares clave / valor.
2. Una colección de elementos, lo que se conoce como array o
arreglo.
Esto quiere decir que no puedes poner un valor primitivo (números,
cadenas, boleanos) tal cual como un JSON válido, sino que tendrá
que estar dentro de una estructura permitida, como un objeto o un
array.
Llaves para representar objetos
Los archivos JSON que representan objetos comienzan siempre con
una llave de inicio { y acaban con la llave de cierre }.
{
"id": 44,
"game": "Colonos de Catan",
"author": "Klaus Teuber",
"ages": "10+"
}
Corchetes para representar los arrays
Los archivos JSON que representan una lista de valores, es decir, un
arreglo, comienzan por [ y terminan por ].
[ 1, 2, 8 ]
El anterior array es un JSON válido, pero es más común el uso de
valores complejos en las casillas del array. De hecho, dentro de una
casilla podríamos tener cualquier otro valor JSON válido, incluso
otros objetos complejos.
[
{
"id": 56431
"name": "El Padrino",
"year": 1972
},
{
"id": 7553
"name": "El Padrino 2",
"year": 1974
},
{
"id": 19563
"name": "El Padrino III",
"year": 1990
},
]
Valores representables con JSON
Todos los valores que podemos encontrar en JSON representan una
de estas posibilidades:
1. Un valor primitivo, que pueden ser de tipos diversos de
Javascript, numérico, cadena de caracteres, y boleanos (true /
false).
2. Arrays, es decir, una secuencia de valores separados por
comas. En los arrays utilizamos los corchetes para delimitar el
principio y fin de los valores que contienen.
3. Objetos, es decir, otros elementos JSON con pares clave /
valor.
4. Además, también es válido el valor null.
Uso de comillas dobles
Se deben usar siempre comillas dobles a la hora de encerrar cadenas
y nombres de los atributos del objeto.
Este punto es importante, porque la sintaxis de Javascript para los
literales de objetos permite colocar los nombres de las propiedades
con y sin comillas, mientras que en JSON estamos obligados a colocar
los nombres de las propiedades siempre con comillas dobles.
{
"id": 1,
"name": "Patatas nuevas",
"description": "Patatas cosechadas este año",
"available": true
}
En el código anterior, los nombres de las propiedades "id", "name",
etc. se deben colocar con comillas dobles. Todos los nombres de los
atributos del objeto deben tener comillas necesariamente. Además,
las cadenas también se deben colocar con comillas dobles.
Comas para separar los pares clave / valor
Cada elemento del objeto JSON se separa del siguiente con una
coma (,). Pero no debe haber una coma después del último elemento
en ningún caso (Javascript sí que la permitiría).
UTF-8 obligatorio
Todos los archivos con código JSON deben estar codificados con UTF-
8 de manera obligatoria. El archivo transferido en un JSON debe ser
necesariamente codificado como UTF8 para que no haya problemas
de visualización de los caracteres contenidos en él.
EDITAR
Limitaciones de JSON
A pesar que JSON es un formato estupendo para su función, también
tiene algunas limitaciones que convendría destacar.
No hay un esquema
Aunque en la mayoría de las ocasiones no necesitamos un esquema
(schema), el lenguaje JSON no podría proporcionar un mecanismo
para conseguir crear un esquema con el que forzar la corrección de
los objetos, o validarlos. En muchos casos no tener esquema no es un
problema y puede ser hasta una ventaja en los casos en los que se
requiere flexibilidad de los modelos de los objetos, pero esa carencia
se podría considerar una limitación.
No hay tipos
En JSON no podemos indicar los tipos de los datos de los elementos.
Al tratarse de Javascript el lenguaje origen del JSON esto es
absolutamente natural, pero no sería posible mejorarlo. Además,
existe una única clase de valores numéricos.
No es posible insertar comentarios
De nuevo, no es que los necesitemos, pero si fuera necesario incluir
información más allá de los datos puros, como comentarios, el
lenguaje no lo permite.
EDITAR
Por qué JSON ha sido adoptado para la mayoría
de los servicios web en lugar de XML
JSON es un formato de intercambio de información. Pero no es el
único. De hecho, XML ha sido mucho más tradicional entre las
alternativas de formatos para comunicación entre sistemas
distribuidos. Sin embargo, JSON ha sido quien ha resultado como
ganador en esta lucha entre formatos.
Actualmente JSON es la primera alternativa para compartir
información, debido principalmente a que procesar en JSON es
prácticamente inmediato en el lado del cliente. Es verdad que en el
lado del servidor también resulta un formato ligero y soportado por
todos los lenguajes, pero la clave está en el lado del frontend.
JSON es Javascript y parsearlo para que pueda ser introducido en la
memoria del navegador, como un objeto nativo Javascript es
prácticamente inmediato, no requiere coste alguno para el
intérprete de Javascript. Esta situación es inmensamente más
favorable que la que nos ofrece XML, que también se podría procesar
por Javascript, pero que requeriría algoritmos mucho más costosos,
en los que impicaría un recorrido a un árbol de etiquetas, la creación
de las propiedades de los objetos en memoria, una a una, etc. Eso,
sin contar con los posibles errores de escritura del XML, como una
hipotética etiqueta mal cerrada, que obligarían al intérprete de
Javascript a gastar mucho más tiempo.
Es cierto que los ordenadores actuales tienen suficiente capacidad
de procesamiento para realizar todas estas tareas sobre un XML,
pero son innecesarias ya que el formato JSON no necesita ningún
trabajo adicional para poder interpretarse. Además, tenemos que
pensar que las API REST o servicios web en general pueden ser
consumidos por todo tipo de máquinas, no necesariamente un
ordenador potente. Puede que se trate de un móvil de baja gama o
un reloj, por ejemplo. En estos casos además con XML tendríamos el
problema del consumo de batería para realizar todo ese
procesamiento, lo que puede acortar el tiempo de funcionamiento
de los sistemas y empeorar la experiencia de usuario. Si tenemos en
cuenta además que en un acceso a una aplicación frontend moderna
se pueden realizar decenas o cientos de consultas para obtener
respuestas de un servicio web, esa necesidad de procesamiento extra
en un XML se multiplicaría varias veces.
Por todo, JSON se ha impuesto sobre XML, aunque el propio XML
tenga también otra serie de ventajas como lenguaje que también
pueden ser apreciables en diversas situaciones. En la práctica el
motivo fundamental de la elección es sobre todo la maximización del
rendimiento de los clientes de las API.
EDITAR
Funciones para JSON en Javascript
El trabajo en Javascript con JSON incluye un par de métodos de
utilidad, que dependen del objeto global "JSON". Mediante éstos es
posible convertir un objeto Javascript a una cadena JSON y
viceversa.
JSON.Parse(cadena)
Esta función permite convertir una cadena en formato JSON en una
variable Javascript que contiene la representación del valor de esa
cadena.
var objeto = JSON.parse('{"nombre": "juan", "edad": 33,
"casado": false}');
JSON.stringify(objeto)
Esta función Javascript convierte un objeto, un array u otro valor en
su representación como cadena en formato JSON.
var coche = {
modelo: "Ford Focus",
anioFabricacion: "2020",
motorizacion: 'Gasolina'
}
var cadena = JSON.stringify(coche);
Las funciones de JSON para Javascript están disponibles en todos los
navegadores actualmente. En Internet Explorer fueron introducidas
en IE8, por lo que se pueden usar con total tranquilidad en cualquier
navegador existente.
EDITAR
Accediendo a un servicio web que devuelve JSON
desde Javascript mediante fetch
Uno de los mecanismos más frecuentes de las aplicaciones modernas
es el acceso a datos de servicios web, generalmente implementados
mediante un API REST que devuelve archivos en formato JSON.
Esto se puede hacer mediante diversos mecanismos del lado del
cliente. El más estándar sería Ajax y el uso de fetch, que es la nueva
función de Javascript para el acceso a datos del servidor, que
devuelve una promesa.
Fetch es una función a la que le indicamos la URL a la que queremos
acceder.
fetch('https://url/del/servicio/web)
Esta función nos devuelve una promesa, que debemos que esperar
que se resuelva. Una vez resuelta obtenemos uan respuesta, que nos
indica los datos de la solicitud HTTP que se acaba de realizar.
.then(response => {
// Código a ejecutar con la respuesta
})
Ahora bien, si esa respuesta era en formato JSON podemos acceder
al objeto Javascript que representa ese JSON por medio del método
response.json(). La dificultad es que este método devuelve a su vez
otra promesa, que tenemos que encadenar.
El código completo de encadenar dos promesas sería el siguiente:
fetch('https://url/del/servicio/web')
.then(response => response.json())
.then(json => {
// aquí tenemos el parámetro json que contien el dato
que nos ha devuelto el servicio web.
// podemos hacer cualquier cosa con él...
console.log(json)
});
Puedes encontrar más información de este mecanismo de acceso a
datos del servidor en el artículo de fetch.
EDITAR
Funciones JSON para PHP
Por supuesto, PHP soporta JSON con funciones nativas, aunque la
incorporación de estas funciones solamente se produjo en PHP 5.2.
Existen dos funciones para el trabajo con JSON, una para codificar
un elemento en formato JSON y otra para descodificar un JSON y
crear una estructura de datos PHP.
json_encode($valor)
Esta función recibe un valor y devuelve un JSON que resulta de la
codificación de ese valor en el formato de notación de objeto
Javascript. El valor puede ser de cualquier tipo de dato, como podría
ser una variable numérica, cadena, aunque generalmente se usa más
habitualmente con arrays asociatios u objetos.
$cadena_en_formato_JSON = json_encode([
'propiedad' => 'valor',
'edad' => 33
]);
json_decode($cadena)
Esta función recibe una cadena de texto que debe tener un formato
correcto en JSON. Devuelve una variable PHP que contiene la
representación nativa del JSON en PHP. Por ejemplo, típicamente
devolverá un objeto en el que encontramos las propiedades del JSON
y los valores.
$producto = json_decode('{"producto":"ordenador
portatil","precio":599}');
Trabajar con JSON en PHP es bastante sencillo con estas dos
funciones. Podemos encontrar varios ejemplos prácticos en el Manual
de JSON para PHP.

Más contenido relacionado

La actualidad más candente

Tutorial de DTD en PDF
Tutorial de DTD en PDFTutorial de DTD en PDF
Tutorial de DTD en PDFAbrirllave
 
Java persistence
Java persistenceJava persistence
Java persistencecabraval
 
Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - SerializaciónCarlos Hernando
 
2. Manejo de la sintaxis del lenguaje
2. Manejo de la sintaxis del lenguaje2. Manejo de la sintaxis del lenguaje
2. Manejo de la sintaxis del lenguajeLaura Folgado Galache
 
6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)Laura Folgado Galache
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosAntonio Palomares Sender
 
Lenguaje javascript
Lenguaje javascriptLenguaje javascript
Lenguaje javascriptXoch Flores
 
2.android java
2.android   java2.android   java
2.android javaguidotic
 

La actualidad más candente (19)

Tutorial de DTD en PDF
Tutorial de DTD en PDFTutorial de DTD en PDF
Tutorial de DTD en PDF
 
XSLT
XSLTXSLT
XSLT
 
Semana 4 Introduccion Javascript
Semana 4   Introduccion JavascriptSemana 4   Introduccion Javascript
Semana 4 Introduccion Javascript
 
Java persistence
Java persistenceJava persistence
Java persistence
 
Persistencia en Java - Serialización
Persistencia en Java - SerializaciónPersistencia en Java - Serialización
Persistencia en Java - Serialización
 
2. Manejo de la sintaxis del lenguaje
2. Manejo de la sintaxis del lenguaje2. Manejo de la sintaxis del lenguaje
2. Manejo de la sintaxis del lenguaje
 
6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)6. Utilización del modelo de objetos del documento (DOM)
6. Utilización del modelo de objetos del documento (DOM)
 
XML y DTDs
XML y DTDsXML y DTDs
XML y DTDs
 
Semana 4 Javascript funciones y Metodos
Semana 4   Javascript funciones y MetodosSemana 4   Javascript funciones y Metodos
Semana 4 Javascript funciones y Metodos
 
Framework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetosFramework .NET 3.5 05 Tipo y jerarquía de objetos
Framework .NET 3.5 05 Tipo y jerarquía de objetos
 
Semana 1 Estructuras de Control en Java
Semana 1   Estructuras de Control en JavaSemana 1   Estructuras de Control en Java
Semana 1 Estructuras de Control en Java
 
Semana 4 Javascript Estructura de Datos y ciclo FOR
Semana 4   Javascript Estructura de Datos y ciclo FORSemana 4   Javascript Estructura de Datos y ciclo FOR
Semana 4 Javascript Estructura de Datos y ciclo FOR
 
Apuntes: Manejar el DOM con JavaScript
Apuntes: Manejar el DOM con JavaScriptApuntes: Manejar el DOM con JavaScript
Apuntes: Manejar el DOM con JavaScript
 
Codigo
CodigoCodigo
Codigo
 
Semana 6 Módulos Clases y Objetos
Semana 6   Módulos Clases y ObjetosSemana 6   Módulos Clases y Objetos
Semana 6 Módulos Clases y Objetos
 
Lenguaje javascript
Lenguaje javascriptLenguaje javascript
Lenguaje javascript
 
2.android java
2.android   java2.android   java
2.android java
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Presentación Base de Datos Slideshare
Presentación Base de Datos Slideshare Presentación Base de Datos Slideshare
Presentación Base de Datos Slideshare
 

Similar a Nuevo Document Microsoft Word.docx

Similar a Nuevo Document Microsoft Word.docx (20)

G3 json
G3 jsonG3 json
G3 json
 
Json
JsonJson
Json
 
XML y JSON
XML y JSONXML y JSON
XML y JSON
 
Xml
XmlXml
Xml
 
Semana 7 Proyecto Misión TIC 2022 JSON
Semana 7   Proyecto Misión TIC 2022 JSONSemana 7   Proyecto Misión TIC 2022 JSON
Semana 7 Proyecto Misión TIC 2022 JSON
 
JSON
JSONJSON
JSON
 
Integración de aplicaciones Java
Integración de aplicaciones JavaIntegración de aplicaciones Java
Integración de aplicaciones Java
 
02 - Servicios SOAP.pptx
02 - Servicios SOAP.pptx02 - Servicios SOAP.pptx
02 - Servicios SOAP.pptx
 
Dbpedia
DbpediaDbpedia
Dbpedia
 
Tecnologías de la web semántica
Tecnologías de la web semánticaTecnologías de la web semántica
Tecnologías de la web semántica
 
Web services restful con JAX-RS
Web services restful con JAX-RSWeb services restful con JAX-RS
Web services restful con JAX-RS
 
Tema 3 0
Tema 3 0Tema 3 0
Tema 3 0
 
Tema 3 0
Tema 3 0Tema 3 0
Tema 3 0
 
Parte 2. web semantica eva mendez - argentina - 301009
Parte 2. web semantica   eva mendez - argentina - 301009Parte 2. web semantica   eva mendez - argentina - 301009
Parte 2. web semantica eva mendez - argentina - 301009
 
Sgbd mongodb
Sgbd   mongodbSgbd   mongodb
Sgbd mongodb
 
SOAP y Web Services
SOAP y Web ServicesSOAP y Web Services
SOAP y Web Services
 
Modulo2
Modulo2Modulo2
Modulo2
 
Omar unidad 07 base de datos
Omar unidad 07 base de datosOmar unidad 07 base de datos
Omar unidad 07 base de datos
 
Websemantica
WebsemanticaWebsemantica
Websemantica
 
Websemantica 1218250849453303 9
Websemantica 1218250849453303 9Websemantica 1218250849453303 9
Websemantica 1218250849453303 9
 

Último

Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucioneschorantina325
 
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdfTIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdfLUZMARIAAYALALOPEZ
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdfedwinmelgarschlink2
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdflauradbernals
 
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjjPPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjjNachisRamos
 
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señorkkte210207
 
Las redes sociales en el mercado digital
Las redes sociales en el mercado digitalLas redes sociales en el mercado digital
Las redes sociales en el mercado digitalNayaniJulietaRamosRa
 

Último (7)

Unidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disolucionesUnidad V. Disoluciones quimica de las disoluciones
Unidad V. Disoluciones quimica de las disoluciones
 
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdfTIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
TIPOS DE LA PSICOPATOLOGÍA DE LA PERCEPCIÓN.pdf
 
12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf12 Clasificacion de las Computadoras.pdf
12 Clasificacion de las Computadoras.pdf
 
Guia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdfGuia para el registro en el sitio slideshare.pdf
Guia para el registro en el sitio slideshare.pdf
 
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjjPPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
PPT-HISTORIA-6°-ABC.pptxjjjjjjjjjjjjjjjjjjjjjj
 
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
02. Mr. Spencer (T.L. Sawn).pdf.libro de un señor
 
Las redes sociales en el mercado digital
Las redes sociales en el mercado digitalLas redes sociales en el mercado digital
Las redes sociales en el mercado digital
 

Nuevo Document Microsoft Word.docx

  • 1. EL FORMATO JSON Ya sabemos que un aspecto principal de la tecnología Ajax es el intercambio de datos. Sabemos igualmente que podemos recuperar datos en formatos no estandarizados (por ejemplo datos contenidos en un fichero php) pero que resulta más ventajoso el uso de formatos estándar como XML. JSON es otro formato estándar para datos que destaca por ser ligero y rápido. DE XML A JSON: PRIMERA APROXIMACIÓN Al igual que XML define un formato para el intercambio de datos, JSON define otro formato. El formato JSON se basa en pares atributo-valor. Un ejemplo de dato en formato JSON y su equivalente en XML puede ser el siguiente: Formato JSON Formato XML { "nombre": "Juan", "apellidos": "Suárez Iglesias", "edad": 25, "direccion": { "calle_y_num": "Acacias, nº34", "ciudad": "Valencia", "codigo_postal": "43005", "pais": "Colombia", }, "telefono": [ { "tipo": "fijo", "numero": "0034966432134" }, { "tipo": "móvil", "numero": "0034677493826" } ] } <?xml version="1.0" encoding="UTF-8" ?> <nombre>Juan</nombre> <apellidos>Suárez Iglesias</apellidos> <edad>25</edad> <direccion> <calle_y_num>Acacias, nº34</calle_y_num> <ciudad>Valencia</ciudad> <codigo_postal>43005</codigo_postal> <pais>Colombia</pais> </direccion> <telefono> <tipo>fijo</tipo> <numero>0034966432134</numero> </telefono> <telefono> <tipo>móvil</tipo> <numero>0034677493826</numero> </telefono>
  • 2. En este ejemplo vemos algunas de las características de JSON. Un elemento de datos (unidad básica de intercambio de información u objeto JSON) queda delimitado por llaves { … }. En este ejemplo las llaves externas delimitarían los datos de una persona. Un elemento de datos JSON contiene pares de elementos "nombre": "valor" con la peculiaridad de que valor puede ser tanto una cadena de texto entrecomillada como otras cosas como explicaremos a continuación. JSON: HISTORIA Y ESPECIFICACIÓN OFICIAL A finales de los años 90 XML era el formato para intercambio de datos con mayor implantación. No obstante, presentaba problemas sobre todo cuando se trataba de trabajar con ficheros con gran volumen de datos donde el procesamiento se volvía lento. Surgieron entonces intentos para definir formatos que fueran más ligeros y rápidos para el intercambio de información. Uno de ellos fue JSON, promovido y popularizado por Douglas Crockford y sus colaboradores a principios de los años 2000. JSON se caracteriza por reducir el tamaño de los archivos y el volumen de datos que es necesario transmitir frente a otros estándares como XML. Por ello JSON fue adquiriendo popularidad hasta convertirse en un estándar. Esto no significa que XML haya dejado de utilizarse. En la actualidad se utiliza tanto XML como JSON para el intercambio de datos. Utilizar uno u otro depende de las circunstancias y de las preferencias que en cada momento se determinen. Hoy día JSON cuenta con un sitio web oficial (http://json.org) y una especificación oficial producida por ECMA International, el mismo organismo encargado de la especificación oficial de JavaScript. La especificación oficial de JSON, publicada por primera vez en 2013 con el nombre de “Standard ECMA -404 The JSON Data Interchange Format” puede consultarse en la web de Ecma International (http://www.ecma- international.org/publications/files/ECMA-ST/ECMA-404.pdf). Aunque en sus orígenes JSON estuvo ligado a JavaScript, y de hecho su notación puede decirse que está inspirada en la notación de objetos JavaScript, con el tiempo se ha convertido en un estándar independiente de datos, no ligado a ningún lenguaje en concreto, de la misma forma que xml no está ligado a ningún lenguaje en concreto. Al igual que un fichero xml es un fichero de texto, un fichero json también lo es. JSON: LENGUAJES CON SOPORTE Con el tiempo prácticamente todos los lenguajes de programación han introducido soporte para el intercambio de datos basado en JSON. En este listado podemos ver algunos de los lenguajes o entornos con soporte para JSON y los nombres de sus librerías, extensiones o utilidades dedicadas a JSON: ABAP: EPO Connector. ActionScript: ActionScript3 , JSONConnector. Ada: GNATCOLL , JSON. AdvPL: JSON-ADVPL. ASP: JSON for ASP , JSON ASP utility class. JavaScript: JSON , json2 , js , clarinet , Oboe , js. LabVIEW: i3-JSON , LAVA JSON , Lisp: Common Lisp JSON , Yason , Emacs Lisp. LiveCode: mergJSON , LotusScript: JSON LS.
  • 3. AWK: JSON , awk , rhawk. Bash: Jshon , JSON , sh. BlitzMax: bmx-rjson. C: JSON_checker , YAJL , js0n , LibU , json-c , json-parser , jsonsl , WJElement , M's JSON parser , cJSON , Jansson , jsmn , cson , parson , ujson4c , nxjson , frozen , microjson. C++: JSONKit , jsonme-- , ThorsSerializer , JsonBox , jvar , rapidjson , jsoncons , json , JSON Support in Qt , QJson , qmjson , jsoncpp , zoolib , JOST , CAJUN , libjson , nosjob , JSON++ , SuperEasyJSON , Casablanca , JSON library for IoT , minijson. C#: fastJSON , JSON_checker , Jayrock , Json , NET - LINQ to JSON , LitJSON , JSON for , NET , JsonFx , JSON@CodeTitans , How do I write my own parser? , JSONSharp , JsonExSerializer , fluent-json , Manatee Json , FastJsonParser Ciao: Ciao JSON encoder and decoder. Clojure: data , json. Cobol: XML Thunder. ColdFusion: SerializeJSON , toJSON. D: Cashew , Libdjson Dart: json library. Delphi: Delphi Web Utils , JSON Delphi Library , tiny-json. E: JSON in TermL. Erlang: mochijson2. Fantom: Json. FileMaker: JSON. Fortran: json-fortran , YAJL-Fort. Go: package json. Groovy: groovy-io Haskell: RJson package , json package Java: JSON-java , JSONUtil , Jackson JSON Processor , jsonp , Json-lib , JSON Tools , Stringtree , SOJO , Jettison , json-taglib , XStream , Flexjson , JON tools , Argo , jsonij , fastjson , mjson , jjson , json-simple , json- io , JsonMarshaller , google-gson , Json- smart , FOSS Nova JSON , Corn CONVERTER , Apache johnzon LPC: Grimoire: LPC JSON. Lua: JSON Modules. M: DataBallet. Matlab: JSONlab , 20565 , 23393. Net.Data: netdata-json. Objective C: NSJSONSerialization , json- framework , JSONKit , yajl-objc , TouchJSON , ObjFW. OCaml: Yojson , jsonm. OpenLaszlo: JSON. PascalScript: JsonParser. Perl: CPAN , perl-JSON-SL. Photoshop: JSON Photoshop Scripting PHP: PHP 5 , 2 , json , Services_JSON , Zend_JSON , Comparison of php json libraries. PicoLisp: picolisp-json. Pike: Public , Parser , JSON , Public , Parser , JSON2. PL/SQL: pljson: Librairie-JSON. PowerShell: PowerShell. Prolog: SWI-Prolog HTTP support. Puredata: PuRestJson Python: The Python Standard Library , simplejson , pyson , Yajl-Py , ultrajson , metamagic , json R: rjson , jsonlite. Racket: json-parsing. Rebol: json , r. RPG: JSON Utilities Ruby: json , yajl-ruby , json-stream , yajl-ffi. Scala: package json. Scheme: MZScheme , PLT Scheme. Squeak: Squeak. Symbian: s60-json-library. Tcl: JSON. Visual Basic: VB-JSON , PW , JSON Visual FoxPro: fwJSON , JSON , vfpjson.
  • 4. JSON: ESPECIFICACIÓN FORMAL La especificación formal de JSON es relativamente simple. Gráficamente se define con las siguientes figuras. Figura 1: un objeto JSON está formado por uno o varios pares string: value (cadena:valor) Figura 2: un valor en JSON puede ser un string (cadena), un número, un objeto JSON, un array, el valor true, el valor false o el valor null. Figura 3: un array o arreglo en JSON está formado por valores delimitados entre corchetes y separados por comas.
  • 5. Figura 4: una cadena JSON queda formada de forma análoga a como se forma en muchos lenguajes de programación. Determinados caracteres han de usar una secuencia de escape. Figura 5: un número JSON queda formado de forma análoga a como se forma en muchos lenguajes de programación.
  • 6. ---4 JSON es un lenguaje usado para el intercambio de datos entre sistemas, está basado en la notación de los literales de objeto de Javascript. JSON son las siglas de JavaScript Object Notation, o sea, Notación de Objeto Javascript. Básicamente usa la misma notación o forma con la que se escriben los objetos Javascript en el código, los literales de objeto, con algunas restricciones y añadidos extra. La utilidad de JSON es la de intercambiar datos, por eso se conoce como lenguaje de intercambio de información o lenguaje de transporte. Sirve para la comunicación entre servicios web (web services) y los clientes que los consumen, enviándo y recibiendo la información en formato JSON. Características de JSON  JSON es un lenguaje de modelador de datos  Consiste en pares "clave - valor"  Los valores pueden cadenas, números o boleanos, así como otros objetos JSON, con cualquier nivel de anidación  Es un formato flexible, ligero y fácilmente transferible a través de las redes
  • 7. Ventajas de JSON  La lectura del código resulta de fácil lectura y la información es suficienteme expresiva para poder ser leída por personas, además de máquinas.  El tamaño de los archivos que se transfieren es ligero.  El código está basado en el lenguaje Javascript, lo que es ideal para las aplicaciones web.  Todos los lenguajes disponen de funciones para interpretar cadenas JSON y convertir datos en cadenas JSON válidas.  Se escribe en archivos de texto plano con codificación UTF8, que es compatible con todos los sistemas. Estas ventajas son especialmente interesantes en el entorno web, ya que Javascript es el lenguaje de programación para frontend y el código es directamente entendible por cualquier sistema que soporte Javascript. Esta facilidad de procesamiento del JSON y su ligereza para la transmisión lo hacen ideal como formato de intercambio de información y por eso es ampliamente usado, mucho más que otras alternativas como podría ser el lenguaje XML. Por estos motivos, la mayoría de los servicios web que se construyen para ser consumidos por clientes web se implementan bajo JSON. Para qué se usa el JSON JSON es un lenguaje para representar datos, con la sintaxis propia de los literales de objetos Javascript. Sus usos son varios, pero principalmente serían los siguientes:  Compartir y transferir información entre distintos sistemas de software.  Almacenar información en sistemas de persistencia. Compartir información entre sistemas El hecho de que JSON se representa en archivos de texto plano hace muy fácil su transferencia entre sistemas informáticos, usando protocolos ampliamente extendidos como HTTP.
  • 8. Por tanto, JSON es un lenguaje habitualmente usado para transferir datos entre aplicaciones. En Internet el uso más importante es el de generar datos en el backend y enviarlos a las aplicaciones frontend. El flujo sería el siguiente: 1. Las aplicaciones frontend requieren datos para representar al usuario. 2. Mediante Javascript realizan solicitudes HTTP a un endpoint (URL) en el backend. Estas solicitudes se realizan de manera asíncrona mediante Ajax. 3. El backend recibe la solicitud sobre el dato que se requiere desde el frontend, o la operación que se desea realizar (ediciones, inserciones, etc.) 4. El backend realiza la operación, enviando el resultado al frontend en formato JSON. 5. El frontend recibe el JSON y generalmente construye mediante Javascript el HTML necesario para representar esa información convenientemente al usuario. Este flujo es el que se realiza en los servicios web o APIs, que encontramos habitualmente en las aplicaciones web modernas. Dentro del esquema MVC, desde el punto de vista del backend el JSON sería la vista. Mientras que en la aplicación frontend el JSON sería el modelo. Este JSON también se conoce con el nombre de DTO (Data Transfer Object) en estas arquitecturas de aplicaciones. Almacenar información en bases de datos Además de las bases de datos relacionales, que almacenan la información en tablas, existen actualmente otras bases de datos llamadas NoSQL o simplemente no relacionales, que almacenan los datos en formato JSON o alguna variante o extensión de este formato. En estas bases de datos generalmente se tienen colecciones de elementos, como si fueran arrays, y en cada colección se almacenan objetos, que tienen una representación directa en JSON. Ejemplos de estas bases de datos serían MongoDB, CouchDB, Base de datos en tiempo real de Firebase, etc.
  • 9. Actualmente también bases de datos relacionales como MySQL, Oracle o PostgreSQL soportan el almacenamiento de JSON. Es decir, tienen tipos de datos JSON que son capaces de entender y procesar como objetos. EDITAR Ejemplo de código JSON Aquí podemos ver un ejemplo de un código en formato JSON. { "nombre":"Jonh Doe", "profesion":"Programador", "edad":25, "lenguajes":["PHP","Javascript","Dart"], "disponibilidadParaViajar":true, "rangoProfesional": { "aniosDeExperiencia": 12, "nivel": "Senior" } } Los archivos JSON pueden tener cualquier nivel de anidación que sea necesario, ya que podemos colocar unos objetos dentro de otros, creando un árbol de datos de cualquier profundidad. EDITAR Reglas de sintaxis en JSON Los archivos en formato JSON tienen las mismas reglas de sintaxis del lenguaje Javascript. Pero además necesitan cumplir algunas normas adicionales, que no son necesarias en los literales de objeto Javascript: Estructuras disponibles
  • 10. En JSON podemos estructurar los datos de dos maneras distintas, como arrays y objetos. Todos los archivos de JSON representan una de estas dos estructuras: 1. On objeto, es decir, una lista de pares clave / valor. 2. Una colección de elementos, lo que se conoce como array o arreglo. Esto quiere decir que no puedes poner un valor primitivo (números, cadenas, boleanos) tal cual como un JSON válido, sino que tendrá que estar dentro de una estructura permitida, como un objeto o un array. Llaves para representar objetos Los archivos JSON que representan objetos comienzan siempre con una llave de inicio { y acaban con la llave de cierre }. { "id": 44, "game": "Colonos de Catan", "author": "Klaus Teuber", "ages": "10+" } Corchetes para representar los arrays Los archivos JSON que representan una lista de valores, es decir, un arreglo, comienzan por [ y terminan por ]. [ 1, 2, 8 ] El anterior array es un JSON válido, pero es más común el uso de valores complejos en las casillas del array. De hecho, dentro de una casilla podríamos tener cualquier otro valor JSON válido, incluso otros objetos complejos. [ { "id": 56431
  • 11. "name": "El Padrino", "year": 1972 }, { "id": 7553 "name": "El Padrino 2", "year": 1974 }, { "id": 19563 "name": "El Padrino III", "year": 1990 }, ] Valores representables con JSON Todos los valores que podemos encontrar en JSON representan una de estas posibilidades: 1. Un valor primitivo, que pueden ser de tipos diversos de Javascript, numérico, cadena de caracteres, y boleanos (true / false). 2. Arrays, es decir, una secuencia de valores separados por comas. En los arrays utilizamos los corchetes para delimitar el principio y fin de los valores que contienen. 3. Objetos, es decir, otros elementos JSON con pares clave / valor. 4. Además, también es válido el valor null. Uso de comillas dobles Se deben usar siempre comillas dobles a la hora de encerrar cadenas y nombres de los atributos del objeto. Este punto es importante, porque la sintaxis de Javascript para los literales de objetos permite colocar los nombres de las propiedades
  • 12. con y sin comillas, mientras que en JSON estamos obligados a colocar los nombres de las propiedades siempre con comillas dobles. { "id": 1, "name": "Patatas nuevas", "description": "Patatas cosechadas este año", "available": true } En el código anterior, los nombres de las propiedades "id", "name", etc. se deben colocar con comillas dobles. Todos los nombres de los atributos del objeto deben tener comillas necesariamente. Además, las cadenas también se deben colocar con comillas dobles. Comas para separar los pares clave / valor Cada elemento del objeto JSON se separa del siguiente con una coma (,). Pero no debe haber una coma después del último elemento en ningún caso (Javascript sí que la permitiría). UTF-8 obligatorio Todos los archivos con código JSON deben estar codificados con UTF- 8 de manera obligatoria. El archivo transferido en un JSON debe ser necesariamente codificado como UTF8 para que no haya problemas de visualización de los caracteres contenidos en él. EDITAR Limitaciones de JSON A pesar que JSON es un formato estupendo para su función, también tiene algunas limitaciones que convendría destacar. No hay un esquema Aunque en la mayoría de las ocasiones no necesitamos un esquema (schema), el lenguaje JSON no podría proporcionar un mecanismo
  • 13. para conseguir crear un esquema con el que forzar la corrección de los objetos, o validarlos. En muchos casos no tener esquema no es un problema y puede ser hasta una ventaja en los casos en los que se requiere flexibilidad de los modelos de los objetos, pero esa carencia se podría considerar una limitación. No hay tipos En JSON no podemos indicar los tipos de los datos de los elementos. Al tratarse de Javascript el lenguaje origen del JSON esto es absolutamente natural, pero no sería posible mejorarlo. Además, existe una única clase de valores numéricos. No es posible insertar comentarios De nuevo, no es que los necesitemos, pero si fuera necesario incluir información más allá de los datos puros, como comentarios, el lenguaje no lo permite. EDITAR Por qué JSON ha sido adoptado para la mayoría de los servicios web en lugar de XML JSON es un formato de intercambio de información. Pero no es el único. De hecho, XML ha sido mucho más tradicional entre las alternativas de formatos para comunicación entre sistemas distribuidos. Sin embargo, JSON ha sido quien ha resultado como ganador en esta lucha entre formatos. Actualmente JSON es la primera alternativa para compartir información, debido principalmente a que procesar en JSON es prácticamente inmediato en el lado del cliente. Es verdad que en el lado del servidor también resulta un formato ligero y soportado por todos los lenguajes, pero la clave está en el lado del frontend. JSON es Javascript y parsearlo para que pueda ser introducido en la memoria del navegador, como un objeto nativo Javascript es prácticamente inmediato, no requiere coste alguno para el intérprete de Javascript. Esta situación es inmensamente más
  • 14. favorable que la que nos ofrece XML, que también se podría procesar por Javascript, pero que requeriría algoritmos mucho más costosos, en los que impicaría un recorrido a un árbol de etiquetas, la creación de las propiedades de los objetos en memoria, una a una, etc. Eso, sin contar con los posibles errores de escritura del XML, como una hipotética etiqueta mal cerrada, que obligarían al intérprete de Javascript a gastar mucho más tiempo. Es cierto que los ordenadores actuales tienen suficiente capacidad de procesamiento para realizar todas estas tareas sobre un XML, pero son innecesarias ya que el formato JSON no necesita ningún trabajo adicional para poder interpretarse. Además, tenemos que pensar que las API REST o servicios web en general pueden ser consumidos por todo tipo de máquinas, no necesariamente un ordenador potente. Puede que se trate de un móvil de baja gama o un reloj, por ejemplo. En estos casos además con XML tendríamos el problema del consumo de batería para realizar todo ese procesamiento, lo que puede acortar el tiempo de funcionamiento de los sistemas y empeorar la experiencia de usuario. Si tenemos en cuenta además que en un acceso a una aplicación frontend moderna se pueden realizar decenas o cientos de consultas para obtener respuestas de un servicio web, esa necesidad de procesamiento extra en un XML se multiplicaría varias veces. Por todo, JSON se ha impuesto sobre XML, aunque el propio XML tenga también otra serie de ventajas como lenguaje que también pueden ser apreciables en diversas situaciones. En la práctica el motivo fundamental de la elección es sobre todo la maximización del rendimiento de los clientes de las API. EDITAR Funciones para JSON en Javascript El trabajo en Javascript con JSON incluye un par de métodos de utilidad, que dependen del objeto global "JSON". Mediante éstos es posible convertir un objeto Javascript a una cadena JSON y viceversa. JSON.Parse(cadena)
  • 15. Esta función permite convertir una cadena en formato JSON en una variable Javascript que contiene la representación del valor de esa cadena. var objeto = JSON.parse('{"nombre": "juan", "edad": 33, "casado": false}'); JSON.stringify(objeto) Esta función Javascript convierte un objeto, un array u otro valor en su representación como cadena en formato JSON. var coche = { modelo: "Ford Focus", anioFabricacion: "2020", motorizacion: 'Gasolina' } var cadena = JSON.stringify(coche); Las funciones de JSON para Javascript están disponibles en todos los navegadores actualmente. En Internet Explorer fueron introducidas en IE8, por lo que se pueden usar con total tranquilidad en cualquier navegador existente. EDITAR Accediendo a un servicio web que devuelve JSON desde Javascript mediante fetch Uno de los mecanismos más frecuentes de las aplicaciones modernas es el acceso a datos de servicios web, generalmente implementados mediante un API REST que devuelve archivos en formato JSON. Esto se puede hacer mediante diversos mecanismos del lado del cliente. El más estándar sería Ajax y el uso de fetch, que es la nueva función de Javascript para el acceso a datos del servidor, que devuelve una promesa. Fetch es una función a la que le indicamos la URL a la que queremos acceder.
  • 16. fetch('https://url/del/servicio/web) Esta función nos devuelve una promesa, que debemos que esperar que se resuelva. Una vez resuelta obtenemos uan respuesta, que nos indica los datos de la solicitud HTTP que se acaba de realizar. .then(response => { // Código a ejecutar con la respuesta }) Ahora bien, si esa respuesta era en formato JSON podemos acceder al objeto Javascript que representa ese JSON por medio del método response.json(). La dificultad es que este método devuelve a su vez otra promesa, que tenemos que encadenar. El código completo de encadenar dos promesas sería el siguiente: fetch('https://url/del/servicio/web') .then(response => response.json()) .then(json => { // aquí tenemos el parámetro json que contien el dato que nos ha devuelto el servicio web. // podemos hacer cualquier cosa con él... console.log(json) }); Puedes encontrar más información de este mecanismo de acceso a datos del servidor en el artículo de fetch. EDITAR Funciones JSON para PHP Por supuesto, PHP soporta JSON con funciones nativas, aunque la incorporación de estas funciones solamente se produjo en PHP 5.2. Existen dos funciones para el trabajo con JSON, una para codificar un elemento en formato JSON y otra para descodificar un JSON y crear una estructura de datos PHP. json_encode($valor)
  • 17. Esta función recibe un valor y devuelve un JSON que resulta de la codificación de ese valor en el formato de notación de objeto Javascript. El valor puede ser de cualquier tipo de dato, como podría ser una variable numérica, cadena, aunque generalmente se usa más habitualmente con arrays asociatios u objetos. $cadena_en_formato_JSON = json_encode([ 'propiedad' => 'valor', 'edad' => 33 ]); json_decode($cadena) Esta función recibe una cadena de texto que debe tener un formato correcto en JSON. Devuelve una variable PHP que contiene la representación nativa del JSON en PHP. Por ejemplo, típicamente devolverá un objeto en el que encontramos las propiedades del JSON y los valores. $producto = json_decode('{"producto":"ordenador portatil","precio":599}'); Trabajar con JSON en PHP es bastante sencillo con estas dos funciones. Podemos encontrar varios ejemplos prácticos en el Manual de JSON para PHP.