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

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

JSON での PHP 配列の使用

PHP 配列は連想マップであり、整数またはストリングをキーとして使用できます。

従来の整数のインデックス配列と同様の操作を得るために、整数キーを自動的に昇順で連続的に割り振ることができます。 PHP は空のインデックス演算子 ([]) をサポートしています。これを代入の左側で使用すると、配列に項目を 1 つ追加できます。その場合には、現在の最大のインデックス値に 1 を追加した整数インデックスが使用されます。

PHP 連想配列は、JSON オブジェクト構造としてモデル化されます。JSON 配列は匿名だからです。

JSON 論理ツリー内の値は、配列を含む PHP 固有のタイプを使用して設定できます。 配列のタイプによって、結果の JSON 論理ツリーの形状が決まります。 多次元の PHP 配列変数が JSON ドメイン・ツリー・パスに割り当てられると、これらの規則は配列変数の各次元に適用されるため、メッセージ・ツリー内で PHP 配列の各次元をモデル化するように適切な JSON 配列または JSON オブジェクトが形成されます。
個別の値割り当てを使用して PHP で JSON メッセージ・ツリーを作成する場合、割り当てに PHP 配列の付加演算子 ([]) を持つターゲット・パスを追加して、JSON 配列項目を作成できます。 [] 演算子は、以下の場合にパスで使用できます。 [] 演算子を持つターゲット・パスを使用して配列項目を作成しようとする場合、そのパスがツリー内の既存の JSON オブジェクト・エレメントに解決されると、例外がスローされます。

PHPCompute ノードは、PHP 定数 MB_JSON_ARRAY をサポートしています。ユーザーは MbElement setType() メソッドでこの定数を使用して、既存の JSON オブジェクト・エレメントを JSON 配列に変更できます。 この方式は通常、別のパーサー・ドメインにより所有されているツリーからコピーすることによりエレメントが作成されている場合に使用されます。

ツリー内の JSON 配列項目の既存の値にアクセスするまたは変更するには、配列インデックス ([index]) を使用して必要な項目を選択します。 JSON 配列項目は、[index] 形式を使用して JSON ツリー内に作成することはできません。これを試みると、例外がスローされます。

また、インデックス・キーの名前を使用して、JSON ドメイン・ツリー内の非配列エレメントに、このツリーが連想配列であるかのようにアクセスすることもできます。 例えば、address という名前のエレメントの子である street という名前のエレメントを選択するには、以下のパス構造を使用します。
->address['street']

以下の例は、JSON で PHP 配列を使用する方法を示しています。

個別の PHP 変数からの JSON 配列メッセージの作成

配列のインデックス付加演算子 ([]) を持つターゲット・パスを使用することにより、JSON 配列を作成し、項目をその配列に追加できます。
    $strVar = "this";
    $boolVar = true;
    $output_assembly->JSON->Data[] = $strVar;
    $output_assembly->JSON->Data[] = $boolVar;

配列に追加する場合には、配列のインデックス付加演算子 ([]) を使用する必要があります。[index] 形式を使用することはできません。

以下のブローカー・メッセージ・ツリーが生成されます。
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Array     ): Data = (  
        (0x03000000:NameValue): Item = 'this' (CHARACTER)
        (0x03000000:NameValue): Item = TRUE (BOOLEAN)
      )
  )
このメッセージ・ツリーは、以下の JSON ビット・ストリームに直列化されます。
["this",true]
この例を拡張して、多次元 JSON 配列を作成できます。
$output_assembly->JSON->Data[][] = '00';
$data = $output_assembly->JSON->Data;
$data[0][] = '01';
$data[][]  = '10';
$data[1][] = '11';
結果のメッセージ・ツリーは、以下の JSON ビット・ストリームに直列化されます。
[["00","01"],["10","11"]]

PHP インデックス配列からの JSON 配列メッセージの作成

連続する整数キーを使用して PHP 配列を作成して、JSON 配列を形成するメッセージ・ツリー・エレメントに割り当てることができます。
    $arr = array("this", "that");
    $output_assembly->JSON->Data = $arr;
以下のブローカー・メッセージ・ツリーが生成されます。
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Array     ): Data = (  
        (0x03000000:NameValue): 0 = 'this' (CHARACTER)
        (0x03000000:NameValue): 1 = 'that' (CHARACTER)
      )
  )
このメッセージ・ツリーは、以下の JSON ビット・ストリームに直列化されます。
["this", "that" ] 

PHP 連想配列からの JSON オブジェクト・メッセージの作成

この例は、名前付きキーを使用して PHP 配列を作成して、JSON オブジェクトを形成するメッセージ・ツリー・エレメントに割り当てる方法を示しています。
    $arr = array('first' => "1st", 'second' => "2nd");
    $output_assembly->JSON->Data = $arr;
以下のブローカー・メッセージ・ツリーが生成されます。
  (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01000000:Object  ): Data = (
        (0x03000000:NameValue): first = '1st' (CHARACTER)
        (0x03000000:NameValue): second = '2nd' (CHARACTER)
      )
  )
配列インデックス内のキーの名前を使用して、配列エレメントにアクセスできます。
$var1 = $output_assembly->JSON->Data['second']; // 2nd
$var2 = $output_assembly->JSON->Data['none'];   // null
これは、以下の JSON ビット・ストリームに直列化されます。
{"first":"1st","second":"2nd"} 

PHP 整数インデックス多次元配列からの JSON メッセージの作成

データを保持する予定のエレメントに配列を割り当てることができます。 PHP 配列のトップレベルおよびネスト・レベルは整数インデックス配列であるため、どちらのレベルも JSON 配列として作成され、その結果多次元 JSON 配列が作成されます。
$arr = array(array("a1","a2"),array("b1","b2"));
$output_assembly->JSON->Data = $arr;
以下のブローカー・メッセージ・ツリーが生成されます。
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Array     ): Data = (  
        (0x01001000:Array     ): 1 = (  
          (0x03000000:NameValue): 1 = 'a1' (CHARACTER)
          (0x03000000:NameValue): 2 = 'a2' (CHARACTER)
        )
        (0x01001000:Array     ): 2 = (  
          (0x03000000:NameValue): 1 = 'b1' (CHARACTER)
          (0x03000000:NameValue): 2 = 'b2' (CHARACTER)
        )
      )
  )
このメッセージ・ツリーは、以下の JSON ビット・ストリームに直列化されます。
[["a1","a2"],["b1","b2"]]

連想配列と整数インデックス配列が混合した PHP 多次元配列からの JSON メッセージの作成

データを保持する予定のエレメントに配列を割り当てることができます。 PHP 配列のトップレベルは、ストリング・キー名を持つ連想配列であるため、JSON オブジェクトになります。 PHP 配列のネスト・レベルは整数インデックス配列を使用しており、JSON 配列として作成されます。
$arr = array("top1" => array("a1","a2"), "top2" => array("b1","b2"));
$output_assembly->JSON->Data = $arr;
上に示した例から、以下のブローカー・メッセージ・ツリーが生成されます。
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01000000:Object     ): Data = (
        (0x01001000:Array     ):top1 = ( 
          (0x03000000:NameValue): 1 = 'a1' (CHARACTER)
          (0x03000000:NameValue): 2 = 'a2' (CHARACTER)
        )
        (0x01001000:Array     ):top2 = ( 
          (0x03000000:NameValue): 1 = 'b1' (CHARACTER)
          (0x03000000:NameValue): 2 = 'b2' (CHARACTER)
        )
      )
  )
このメッセージ・ツリーは、以下の JSON ビット・ストリームに直列化されます。
{"top1":["a1","a2"],"top2":["b1","b2"]}

論理ツリー内の JSON 配列の更新

[["a1","a2"],["b1","b2"]]
上に示した JSON 入力から、以下のブローカー・メッセージ・ツリーが生成されます。
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Array     ): Data = (  
        (0x01001000:Array     ): Item = (  
          (0x03000000:NameValue): Item = 'a1' (CHARACTER)
          (0x03000000:NameValue): Item = 'a2' (CHARACTER)
        )
        (0x01001000:Array     ): Item = (  
          (0x03000000:NameValue): Item = 'b1' (CHARACTER)
          (0x03000000:NameValue): Item = 'b2' (CHARACTER)
        )
      )
  )
このメッセージを PHP で更新できます。既存のエレメントにアクセスするには、配列を保持しているエレメントで [index] を使用し、追加のエレメントを作成するには、[] 形式を使用します。
output_assembly->JSON->Data[0][0] = "A1";
output_assembly->JSON->Data[1][1] = "B2";
output_assembly->JSON->Data[1][] = "New3";
この例により、次の JSON 出力が生成されます。
[["A1","a2"],["b1","B2","new3"]]

反復エレメントを含む XML ドメイン・メッセージ・サブツリーを JSON ドメインにコピーし、PHP を使用して JSON 配列に変換する

PHP 定数 MB_JSON_ARRAY を使用して、メッセージ・ツリー・エレメントの配列型を明示的にテストおよび設定できます。 例えば、メッセージ・ツリー・データを XML ドメインから JSON ドメインに、または JSON ドメインから XML ドメインにコピーする場合は、MB_JSON_ARRAY を使用できます。 以下の XML 入力には、反復エレメントが含まれています。
<doc>
      <cats>
        <cat>thing1</cat>
        <cat>thing2</cat>
      </cats>
</doc>
XMLNSC パーサーにより以下のブローカー・メッセージ・ツリーが生成されます。
(0x01000000:Folder):XMLNSC     = ( ['xmlnsc' : 0xhhhhhh]
      (0x01001000:Folder     ): doc = (
        (0x01001000:Folder     ): cats = (
          (0x03000000:NameValue): cat = 'thing1' (CHARACTER)
          (0x03000000:NameValue): cat = 'thing2' (CHARACTER)
        )
      )
 )
メッセージ・フローは、このブローカー・メッセージ・ツリーを JSON メッセージに変換して、以下の方法で直列化することができます。
{"cats":["thing1","thing2"]}
以下の例に示されているように、PHP を使用してメッセージを変換できます。
$output_assembly->JSON->Data = $input_assembly->XMLNSC->doc;
$output_assembly->JSON->Data->cats->setType(MB_JSON_ARRAY);
この変換により以下のメッセージ・ツリーが生成され、これは JSON フォーマットへ直列化されます。
(Message):JSON     = ( ['json' : 0xhhhhhh]
    (0x01000000:Obejct):Data     = (
        (0x01001000:Array     ): cats = (
          (0x03000000:NameValue): cat = 'thing1' (CHARACTER)
          (0x03000000:NameValue): cat = 'thing2' (CHARACTER)
        )
     )
 )

反復する名前を持つ JSON オブジェクトの処理

JSON 仕様では、JSON オブジェクトは重複名を持つべきではできないと定められています。 ただし、メッセージではこの形式を含めることが可能です。例えば、以下の JSON メッセージでは、名前 cat が反復しています。
{"cat":"thing1","cat":"thing2" }
JSON パーサーは、上に示した JSON 入力から、以下のブローカー・メッセージ・ツリーを生成します。
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Object     ): Data = (
        (0x03000000:NameValue): cat = 'thing1' (CHARACTER)
        (0x03000000:NameValue): cat = 'thing2' (CHARACTER)
      )
  )

これは、連想配列に存在できない重複キーを含むため、無効な PHP データ構造です。 その結果、この形式の JSON データは PHPCompute ノードからのアクセス、作成、および変更ができません。 このタイプの JSON データを処理するためには、メッセージ・フローで ESQL または Java™ を使用する必要があります。

特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

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

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


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