JSON (JavaScript Object Notation) ist ein einfaches Format für den Datenaustausch, das auf einer Untergruppe der JavaScript-Programmiersprache basiert.
WebSphere Message Broker bietet Unterstützung für eine JSON-Domäne. Nachrichten in der JSON-Domäne werden durch den JSON-Parser verarbeitet und serialisiert. Der JSON-Parser interpretiert einen Bitstrom mithilfe der JSON-Grammatik und erstellt im Broker eine der JSON-Domäne entsprechende logische Nachrichtenbaumstruktur. Bei der Ausgabeverarbeitung von Daten generiert der JSON-Serialisierungsmethode einen mit JSON formatierten Bitstrom aus einer logischen Nachrichtenbaumstruktur der JSON-Domäne.
Der JSON-Parser und die JSON-Serialisierungsmethode unterstützen keine Nachrichtenauswertung, da die JSON-Nachrichtenmodellierung vom Broker nicht unterstützt wird.
Funktionen, die in WebSphere Message Broker-Fixpacks verfügbar werden, können mit dem Parameter -f im Befehl mqsichangebroker aktiviert werden. Der Abschnitt Befehl mqsichangebroker enthält weitere Informationen hierzu.
Weitere Informationen zur JSON-Nachrichtenstruktur finden Sie im Abschnitt JSON-Nachrichtendetails.
Wenn explizit eines der 'UTF-*'-Formate für die CCSID angegeben ist, akzeptiert der JSON-Parser die entsprechende Byteanordnungsmarkierung (BOM, Byte Order Mark) am Anfang des Datenstroms.
JSON-Datenströme werden in einer logischen Nachrichtenbaumstruktur unter dem Element Data analysiert, das zum Parserstammelement JSON gehört. Die logische Baustruktur ist im Abschnitt Beispiel für eine JSON-Nachricht dargestellt.
Der Zugriff auf das Element Data und die Bearbeitung dieses Elements kann über ESQL als JSON.Data, über Java™ als JSON/Data, über PHP als JSON->Data oder über XPath als $Body/Data erfolgen. Der JSON-Parser gibt einen Fehler aus, wenn ein Bitstrom nicht gemäß der JSON-Grammatik formatiert ist.
Die JSON-Serialisierungsmethode wandelt Nachrichtenbaumstrukturen durch Serialisierung in ein JSON-Format um. Die CCSID kann entweder durch die Brokereigenschaftsbaumstruktur oder durch Transportheader in der Nachrichtenassemblierung definiert werden. Wenn keine CCSID definiert ist, wird als Serialisierungsmethode standardmäßig die CCSID des Warteschlangenmanagers verwendet. Dies gilt für alle Knoten außer HTTP-Knoten, deren Serialisierungsmethode standardmäßig die UTF-8-Codierung ist.
Bei Aufruf der JSON-Serialisierungsmethode durch den Funktionsaufruf ASBITSTREAM wird die CCSID durch den CCSID-Parameter definiert. Wenn kein CCSID-Parameter angegeben wird oder dessen Wert 0 ist, wird als JSON-Serialisierungsmethode standardmäßig die UTF-8-Codierung verwendet.
Zur Verarbeitung von Nachrichten mit dem JSON-Parser wählen Sie JSON als Nachrichtendomäne auf dem betreffenden Knoten im Nachrichtenfluss aus. Der Mapping- und der XSLTransform-Knoten unterstützen die JSON-Domäne nicht.
Bei der Serialisierung einer JSON-Nachrichtenbaumstruktur setzt der Broker den HTTP-Inhaltsheader auf application/json, sofern vom Nachrichtenfluss kein expliziter Wert festgelegt wird.
JSON-Objekte werden in der Nachrichtenbaumstruktur des Brokers als Sequenz von NameValue-Elementen modelliert. Der Parser erstellt die Nachrichtenbaumstruktur in der Reihenfolge, in der er die Elemente im Bitstrom erkennt. Die Serialisierungsmethode schreibt die Objektelemente in der Reihenfolge der Baumstruktur in den Bitstrom.
"array1" : [ "thing1", 1 ]
(0x01001000:Array): array1 = (
(0x03000000:NameValue):Item = 'thing1' (CHARACTER)
(0x03000000:NameValue):Item = 1 (INTEGER)
)
Der JSON-Parser ordnet den NameValue-Elementen den Namen Item zu.
"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)
)
)
Das folgende Beispiel zeigt eine einfache JSON-Nachricht:
{
"name" : "John Doe",
"age" : -1.0,
"known" : false,
"address" : { "street" : null,
"city" : "unknown" },
"belongings" : ["item1", "item2", "item3"]
}
Diese JSON-Eingabe generiert die folgende logische Nachrichtenbaumstruktur des Brokers:
(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)
)
)
)