JSON (JavaScript Object Notation) es un sencillo formato de intercambio de datos basado en un subconjunto del lenguaje de programación JavaScript.
WebSphere Message Broker proporciona soporte para un dominio JSON. Los mensajes del dominio JSON los procesa el analizador y serializador JSON. El analizador JSON interpreta una corriente de bits utilizando la gramática JSON y genera un árbol lógico de mensajes del dominio JSON correspondiente en el intermediario. Al procesar datos de salida, el serializador JSON genera una corriente de datos con formato JSON a partir de un árbol lógico de mensaje del dominio JSON.
El analizador y serializador JSON no dan soporte a la validación de mensajes porque el modelo de mensajes JSON no está soportado por el intermediario.
Para habilitar la función que queda disponible en los fixpacks de WebSphere Message Broker, utilice el parámetro -f en el mandato mqsichangebroker. Para obtener más información, consulte Mandato mqsichangebroker.
Para obtener más información sobre la estructura de mensajes JSON, consulte el apartado Detalles de mensajes JSON.
Si se especifica un CCSID UTF-* de manera explícita, el analizador JSON tolera el correspondiente Byte Order Mark (BOM) al principio de la corriente de datos.
Las corrientes de datos JSON se analizan en un árbol lógico de mensaje bajo el elemento Data debajo de la raíz del analizador JSON. La estructura de árbol lógico se muestra en Mensaje JSON de ejemplo.
El elemento Data puede accederse y manipularse desde ESQL como JSON.Data, desde Java™ como JSON/Data, desde PHP como JSON->Datao desde XPath como $Body/Data. El analizador JSON emite un error si una corriente de bits no tiene un formato conforme a la gramática JSON.
El serializador JSON serializa árboles de mensaje en una corriente de datos de formato JSON. El CCSID se puede definir por el árbol de propiedades del intermediario o por las cabeceras de transporte en el conjunto de mensajes. Si no se define ningún CCSID, el serializador adopta el CCSID del gestor de colas predeterminado para todos los nodos excepto los nodos HTTP, que toman el valor predeterminado de codificación UTF-8.
Cuando se invoca el serializador JSON mediante una llamada de función ASBITSTREAM, el CCSID se define en el parámetro CCSID. Si no se proporciona ningún parámetro CCSID, o si el valor se establece en 0, el serializador JSON toma como valor predeterminado la codificación UTF-8.
Para procesar mensajes con el analizador JSON, seleccione JSON como Dominio de mensajes en el nodo pertinente del flujo de mensajes. El nodo Mapping y el nodo XSLTransform no dan soporte al dominio JSON.
El intermediario establece la cabecera HTTP Content-Type en application/json al serializar un árbol de mensajes JSON, a no ser que se establezca un valor explícito en el flujo de mensajes.
Los objetos JSON se modelan en el árbol de mensaje del intermediario como una secuencia de elementos NameValue. El analizador crea el árbol de mensaje en el orden en que se encuentra los miembros en la corriente de bits. El serializador escribe los miembros del objeto en la corriente de bits en el orden de árbol.
"array1" : [ "thing1", 1 ]
(0x01001000:Array): array1 = (
(0x03000000:NameValue):Item = 'thing1' (CHARACTER)
(0x03000000:NameValue):Item = 1 (INTEGER)
)
El analizador JSON asigna el nombre Item a los elementos NameValue.
"array2" : [ {"a" : 1}, {"b" : 2} ]
(0x01001000:Array):array2 = (
(0x01000000:Object):Item = (
(0x03000000:NameValue): a = 1 (INTEGER)
)
(0x01000000:Object):Item = (
(0x03000000:NameValue): b = 2 (INTEGER)
)
)
"array3" : [ [1.1], [2.1] ]
(0x01001000:Array):array3 = (
(0x01001000:Array):Item = (
(0x03000000:NameValue):Item = 1.1E+0 (FLOAT)
)
(0x01001000:Array):Item = (
(0x03000000:NameValue):Item = 2.1E+0 (FLOAT)
)
)
El ejemplo siguiente muestra un mensaje JSON simple:
{
"name" : "John Doe",
"age" : -1.0,
"known" : false,
"address" : { "street" : null,
"city" : "unknown" },
"belongings" : ["item1", "item2", "item3"]
}
Esta entrada JSON genera el siguiente árbol lógico de mensaje de intermediario:
(0x01000000:Object):JSON = ( ['json' : 0xd55fc8]
(0x01000000:Object):Data = (
(0x03000000:NameValue):name = 'John Doe' (CHARACTER)
(0x03000000:NameValue):age = -1E+0 (FLOAT)
(0x03000000:NameValue): known = FALSE (BOOLEAN)
(0x01000000:Object ):address = (
(0x03000000:NameValue):street = NULL
(0x03000000:NameValue):city = 'unknown' (CHARACTER)
)
(0x01001000:Array ):belongings = (
(0x03000000:NameValue):Item = 'item1' (CHARACTER)
(0x03000000:NameValue):Item = 'item2' (CHARACTER)
(0x03000000:NameValue):Item = 'item3' (CHARACTER)
)
)
)