JSON (JavaScript Object Notation) は、JavaScript プログラミング言語のサブセットに基づく単純データ交換フォーマットです。
WebSphere® Message Broker は JSON ドメインをサポートします。 JSON ドメイン内のメッセージは、JSON パーサーおよびシリアライザーによって処理されます。 JSON パーサーは JSON 文法を使用してビット・ストリームを解釈し、 ブローカー内に対応する JSON ドメイン論理メッセージ・ツリーを生成します。 出力のためにデータを処理する際に、JSON シリアライザーは、 JSON ドメイン論理メッセージ・ツリーから JSON フォーマット済みビット・ストリームを生成します。
JSON メッセージ・モデルはブローカーによってサポートされていないため、 JSON パーサーおよびシリアライザーはメッセージ妥当性検査をサポートしません。
WebSphere Message Broker フィックスパックで使用可能になる機能を有効にするには、mqsichangebroker コマンドで -f パラメーターを使用します。 詳しくは、mqsichangebroker コマンドを参照してください。
JSON メッセージ構造について詳しくは、JSON メッセージの詳細を参照してください。
UTF-* CCSID が明示的に指定されている場合、JSON パーサーはデータ・ストリームの先頭に置かれた対応するバイト・オーダー・マーク (BOM) を許容します。
JSON データ・ストリームは解析され、論理メッセージ・ツリーで、JSON パーサー・ルートの下にある Data エレメントの下に置かれます。 論理ツリー構造は、JSON メッセージの例に示されています。
Data エレメントは、ESQL から JSON.Data として、Java™ から JSON/Data として、PHP から JSON->Data として、または XPath から $Body/Data としてアクセスおよび操作できます。 ビット・ストリームが JSON 文法に従ってフォーマットされていない場合、JSON パーサーはエラーを出します。
JSON シリアライザーは、メッセージ・ツリーを JSON フォーマットのデータ・ストリームに直列化します。 CCSID は、ブローカー・プロパティー・ツリー、またはメッセージ・アセンブリー内のトランスポート・ヘッダーによって定義できます。 CCSID が定義されていない場合のデフォルトとして、HTTP ノードを除くすべてのノードで、シリアライザーはキュー・マネージャーのデフォルト CCSID を使用します。HTTP ノードの場合はデフォルトで UTF-8 エンコードが使用されます。
JSON シリアライザーが ASBITSTREAM 関数呼び出しで起動されると、CCSID は CCSID パラメーターによって定義されます。 CCSID パラメーターがない場合、または値を 0 に設定すると、JSON シリアライザーはデフォルトで UTF-8 エンコードを使用します。
JSON パーサーでメッセージを処理するには、メッセージ・フローの関連ノードで、 メッセージ・ドメイン として「JSON」を選択します。 Mapping ノード および XSLTransform ノードは、 JSON ドメインをサポートしません。
JSON メッセージ・ツリーを直列化する場合、ブローカーは HTTP Content-Type ヘッダーを application/json に設定します。ただし、メッセージ・フローによって明示的に値が設定されている場合は別です。
JSON オブジェクトは、ブローカー・メッセージ・ツリー内で、NameValue エレメントのシーケンスとしてモデル化されます。 パーサーは、ビット・ストリームでメンバーを検出した順序と同じ順序でメッセージ・ツリーを作成します。 シリアライザーは、オブジェクト・メンバーをツリーと同じ順序でビット・ストリームに書き込みます。
"array1" : [ "thing1", 1 ]
(0x01001000:Array): array1 = (
(0x03000000:NameValue):Item = 'thing1' (CHARACTER)
(0x03000000:NameValue):Item = 1 (INTEGER)
)
JSON パーサーは、名前 Item を 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)
)
)
以下の例は、 単純な JSON メッセージを示しています。
{
"name" : "John Doe",
"age" : -1.0,
"known" : false,
"address" : { "street" : null,
"city" : "unknown" },
"belongings" : ["item1", "item2", "item3"]
}
この JSON 入力によって、以下のブローカー論理メッセージ・ツリーが生成されます。
(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)
)
)
)