Analizador y dominio JSON
JSON (JavaScript Object Notation) es un formato simple de intercambio de datos basado en un subconjunto del lenguaje de programación JavaScript.
IBM® Integration Bus proporciona soporte para un dominio JSON. Los mensajes del dominio JSON los procesa el analizador y serializador JSON. El analizador JSON interpreta una secuencia de bits utilizando la gramática JSON y genera un árbol lógico de mensajes del dominio JSON correspondiente. Al procesar datos de salida, el serializador JSON genera una corriente de datos con formato JSON a partir de un árbol lógico de mensajes 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.
- Objetos (pares de nombre y valor) con los tipos siguientes:
- Serie
- Número
- Booleano
- Nulo
- .Colecciones ordenadas de valores (matrices)
El analizador JSON solo acepta un objeto JSON o una matriz JSON como el tipo de valor de nivel superior en una corriente de bits de entrada y en una corriente de bits de salida. No se puede utilizar el analizador JSON para que la salida sea un literal de un valor de serie JSON, número, booleano o valor nulo sin incluirlo antes en un objeto o matriz.
Para obtener más información sobre la estructura de mensajes JSON, consulte Detalles del mensaje JSON.
- UTF-8
- UTF-16BE
- UTF-16LE
- UTF-32BE
- UTF-32LE
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 de mensajes lógico bajo laData
El elemento siguienteJSON
raíz de analizador. La estructura de árbol lógico se muestra en Ejemplo de mensaje JSON.
ElData
se puede acceder a un elemento y manipularlo desde ESQL comoJSON.Data
, desde Java™ comoJSON/Data
, desde Editor de correlaciones de datos gráficas utilizando la función Añadir definido por el usuario para definirJSON->Data
, o de XPath como$Body/Data
. El analizador JSON emite un error si no se da formato a una corriente de bits de acuerdo con 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 nodo de integración 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 a través de unASBITSTREAM
llamada de función, el CCSID se define mediante 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 XSL no da soporte al dominio JSON.
El nodo de integración establece la cabecera HTTP Content-Type enapplication/json
al serializar un árbol de mensajes JSON, a menos que el flujo de mensajes establezca un valor explícito.
Los objetos JSON se modelan en el árbol de mensajes del nodo de integración como una secuencia de elementos NameValue. El analizador crea el árbol de mensajes 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.
- Una matriz que contiene valores simples; por ejemplo:
"array1" : [ "thing1", 1 ]
Se genera el árbol de mensaje siguiente:(0x01001000:Array): array1 = ( (0x03000000:NameValue):Item = 'thing1' (CHARACTER) (0x03000000:NameValue):Item = 1 (INTEGER) )
El analizador JSON asigna el nombre
Item
a los elementos de Valor de nombre . - Una matriz que contiene objetos; por ejemplo:
"array2" : [ {"a" : 1}, {"b" : 2} ]
Se genera el árbol de mensaje siguiente:(0x01001000:Array):array2 = ( (0x01000000:Object):Item = ( (0x03000000:NameValue):a = 1 (INTEGER) ) (0x01000000:Object):Item = ( (0x03000000:NameValue):b = 2 (INTEGER) ) )
- Una matriz multidimensional; por ejemplo:
"array3" : [ [1.1], [2.1] ]
Se genera el árbol de mensaje siguiente:(0x01001000:Array):array3 = ( (0x01001000:Array):Item = ( (0x03000000:NameValue):Item = 1.1E+0 (FLOAT) ) (0x01001000:Array):Item = ( (0x03000000:NameValue):Item = 2.1E+0 (FLOAT) ) )
Mensaje JSON de ejemplo
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 mensajes de nodo de integración:
(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)
)
)
)