WebSphere Message Broker バージョン 8.0.0.5 オペレーティング・システム: AIX、HP-Itanium、Linux、Solaris、Windows、z/OS

製品の最新バージョンについては、IBM Integration Bus バージョン 9.0 をご覧ください。

JSON メッセージの変更

JSON オブジェクトおよび JSON 配列を変更できます。

JSON データ・ストリームは解析されて論理メッセージ・ツリーになり、JSON パーサー・ルートにより所有されている Data エレメント下に配置されます。 JSON データ・オブジェクトおよび JSON データ配列は、各サポート言語から次のようにアクセスおよび変更できます。
以下の例は、可能な JSON メッセージを示しています。
{
    "name" : "John Doe",
    "age" : -1,
    "known" : false,
    "address" : { "street" : null,
                  "city" : "unknown" },
    "belongings" : ["this", "that", "the other"]
}
JSON パーサーは入力 JSON ビット・ストリームを解析して、以下のブローカー論理メッセージ・ツリーを生成します。
(Message):JSON     = ( ['json' : 0xhhhhhh]
    (0x01000000:Object):Data      = ( 
      (0x03000000:NameValue): name    = 'John Doe' (CHARACTER)
      (0x03000000:NameValue): age     = -1 (INTEGER)
      (0x03000000:NameValue): known   = FALSE (BOOLEAN)
      (0x01000000:Object     ): address = (
        (0x03000000:NameValue): street = NULL (UNKNOWN)
        (0x03000000:NameValue): city = 'unknown' (CHARACTER)
      )
      (0x01001000:Array     ): belongings = (  
        (0x03000000:NameValue): Item = 'this' (CHARACTER)
        (0x03000000:NameValue): Item = 'that' (CHARACTER)
        (0x03000000:NameValue): Item = 'the other' (CHARACTER)
      )
    )
  )
このメッセージ・ツリーは、ESQL を使用して次のように変更できます。
SET OutputRoot.JSON.Data.age =  InputRoot.JSON.Data.age + 22;   -- Set age to 21
SET OutputRoot.JSON.Data.belongings.Item[4] = 'an other';
SET OutputRoot.JSON.Data.belongings.Item[5] = 'and another';
このメッセージ・ツリーは、PHP を使用して次のように変更できます。
$output_assembly->JSON->Data->address->age = $input_assembly->JSON->Data->address->age + 22; // Set age to 21
$output_assembly->JSON->Data->belongings[2] = 'an other';
$output_assembly->JSON->Data->belongings[3] = 'and another';
多次元配列を含む PHP 配列について詳しくは、JSON での PHP 配列の使用を参照してください。
このメッセージ・ツリーは、Java を使用して次のように変更できます。
MbElement ageEl = message.getRootElement().getLastChild().getFirstElementByPath("/JSON/Data/age");
int age = ((Integer)ageEl.getValue()).intValue();
ageEl.setValue(age + 22);       // Set age to 21
inMessage.getRootElement().getLastChild().getFirstElementByPath("/JSON/Data/belongings/Item[3]").setValue(an other');

多次元配列を含む JSON

以下の例は、多次元配列を含む JSON 入力を示しています。
{
    "customer" : "Joe",
    "orders" : [ [ "thing1", 1, 10.1 ],
                 [ "thing2", 2, 20.2 ]  ]
}
以下のブローカー・メッセージ・ツリーが生成されます。
(Message):JSON   = ( ['json' : 0xhhhhhh] 
    (0x01000000:Object):Data   = (
      (0x03000000:NameValue):customer = 'Joe' (CHARACTER)
      (0x01001000:Array):orders = (  
        (0x01001000:Array):Item   = (  
          (0x03000000:NameValue):Item = 'thing1' (CHARACTER)
          (0x03000000:NameValue):Item = 1 (INTEGER)
          (0x03000000:NameValue):Item = 1.01E+1 (FLOAT)
        ) 
        (0x01001000:Array):Item   = (  
          (0x03000000:NameValue):Item = 'thing2' (CHARACTER)
          (0x03000000:NameValue):Item = 2 (INTEGER)
          (0x03000000:NameValue):Item = 2.02E+1 (FLOAT)
        ) 
      ) 
    ) 
  )
このメッセージ・ツリーは、名前 Item を使用するか、アスタリスク (*) をワイルドカードとして使用することにより、次のように ESQL を介してアクセスされます。
InputRoot.JSON.Data.orders.Item[1].Item[1]   -- 'thing1'
InputRoot.JSON.Data.orders.*[2].*[3]         –- 2.02E+1
このメッセージ・ツリーは、PHP を介して次のようにアクセスされます。
 $output_assembly->JSON->Data.orders[0][0]   // “thing1”
 $output_assembly->JSON->Data.orders[1][2]   // 2.02E+1
このメッセージ・ツリーは、JSON パーサーが配列項目に付与する名前 Item を使用するか、アスタリスク (*) をワイルドカードとして使用することにより、以下のように Java を介してアクセスされます。
inMessage.getRootElement().getFirstElementByPath("/JSON/Data/orders/Item[1]/Item[1]");  // 'thing1'
inMessage.getRootElement().getFirstElementByPath("/JSON/Data/orders/*[2]/*[3]");  // '2.02'
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2014Copyright IBM Corporation 1999, 2014.

        
        最終更新:
        
        最終更新: 2015-02-28 17:48:40


概念トピック概念トピック | バージョン 8.0.0.5 | bc28412_