JSON (JavaScript Object Notation) é um formato de intercâmbio de dados simples baseado em um subconjunto da linguagem de programação JavaScript.
O WebSphere Message Broker fornece suporte para um domínio JSON. As mensagens no domínio JSON são processadas pelo serializador e pelo analisador JSON. O analisador JSON interpreta um fluxo de bits utilizando a gramática JSON e gera uma árvore de mensagens lógicas do domínio JSON correspondente no broker. Ao processar dados para saída, o serializador JSON gera um fluxo de bits formatado por JSON a partir de uma árvore de mensagens lógicas do domínio JSON.
O analisador e serializador JSON não suportam validação de mensagem porque o modelo de mensagem JSON não é suportado pelo broker.
Para ativar a função que se torna disponível nos fix packs do WebSphere Message Broker, use o parâmetro -f no comando mqsichangebroker. Para informações adicionais, consulte Comando mqsichangebroker.
Para obter mais informações sobre estrutura de mensagem JSON, consulte Detalhes da Mensagem JSON.
Se um CCSID UTF-* for especificado explicitamente, o analisador JSON tolerará a Marca de Ordem de Byte (BOM) correspondente no início do fluxo de dados.
Os fluxos de dados JSON são analisados em uma árvore de mensagens lógica, sob o elemento Data abaixo da raiz do analisador JSON. A estrutura em árvore lógica é mostrada no Exemplo de Mensagem JSON.
O elemento Data pode ser acessado e manipulado do ESQL como JSON.Data, do Java™ como JSON/Data, do PHP como JSON->Data ou do XPath como $Body/Data. O analisador JSON emitirá um erro se um fluxo de bits não for formatado de acordo com a gramática JSON.
O serializador JSON serializa árvores de mensagens em um fluxo de dados de formato JSON. O CCSID pode ser definido pela árvore de propriedades do broker ou pelos cabeçalhos de transporte no conjunto da mensagem. Se nenhum CCSID for definido, o serializador definirá como padrão o CCSID padrão do gerenciador de filas para todos os nós, exceto nós HTTP, cujo padrão é a codificação UTF-8.
Quando o serializador JSON é chamado através de uma chamada de função ASBITSTREAM, o CCSID é definido pelo parâmetro CCSID. Se nenhum parâmetro CCSID for fornecido, ou se o valor for configurado como 0, o serializador JSON usará a codificação UTF-8 por padrão.
Para processar mensagens com o analisador JSON, selecione JSON como o Domínio de Mensagem no nó relevante no fluxo de mensagens. O nó Mapeamento e o nó XSLTransform não suportam o domínio JSON.
O broker configura o cabeçalho HTTP Content-Type como application/json ao serializar uma árvore de mensagens JSON, a menos que um valor explícito seja configurado pelo fluxo de mensagens.
Os objetos JSON são modelados na árvore de mensagens do broker como uma sequência de elementos NameValue. O analisador constrói a árvore de mensagens na ordem em que ele encontra os membros no fluxo de bits. O serializador grava os membros do objeto no fluxo de bits na ordem da árvore.
"array1" : [ "thing1", 1 ]
(0x01001000:Array): array1 = (
(0x03000000:NameValue):Item = 'thing1' (CHARACTER)
(0x03000000:NameValue):Item = 1 (INTEGER)
)
O analisador JSON designa o nome Item aos 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)
)
)
O exemplo a seguir mostra uma mensagem JSON simples:
{
"name" : "John Doe",
"age" : -1.0,
"known" : false,
"address" : { "street" : null,
"city" : "unknown" },
"belongings" : ["item1", "item2", "item3"]
}
Esta entrada JSON produz a seguinte árvore de mensagens lógicas do broker:
(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)
)
)
)