WebSphere Message Broker Version 8.0.0.5 Betriebssysteme: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Sehen Sie sich die Informationen zur aktuellen Produktversion im IBM Integration Bus Version 9.0 an.

PHP-Arrays mit JSON verwenden

PHP-Arrays sind assoziative Zuordnungen, in denen der Schlüssel eine Ganzzahl oder eine Zeichenfolge sein kann.

Ganzzahlige Schlüssel können automatisch in aufsteigender Reihenfolge zugeordnet werden, damit sie genauso funktionieren wie ein konventionelles mit Ganzzahlen indexiertes Array. PHP unterstützt einen leeren Indexoperator ([]), der auf der linken Seite einer Zuordnung angegeben werden kann, um dem Array ein Element hinzuzufügen, wobei ein ganzzahliger Index mit dem Wert des höchsten aktuellen Indexes plus 1 verwendet wird.

Assoziative PHP-Arrays werden als JSON-Objektstrukturen modelliert, weil JSON-Arrays anonym sind.

Die Werte in einer logischen JSON-Baumstruktur können mit beliebigen nativen PHP-Typen einschließlich Arrays festgelegt werden. Der Array-Typ bestimmt die resultierende Form der logischen JSON-Baumstruktur: Wenn eine mehrdimensionale PHP-Arrayvariable einem JSON-Domänenbaumstrukturpfad zugeordnet wird, werden diese Regeln auf die einzelnen Dimensionen der Arrayvariable angewandt, sodass ein entsprechendes JSON-Array oder -Objekt in der Nachrichtenbaumstruktur gebildet wird, um die einzelnen Dimensionen des PHP-Arrays zu modellieren.
Wenn Sie in PHP eine JSON-Nachrichtenbaumstruktur mithilfe einzelner Wertzuordnungen erstellen, können Sie JSON-Array-Einträge erstellen, indem Sie in der Zuordnung den Operator zum Anhängen eines PHP-Arrays ([]) an den Zielpfad anfügen. Sie können den Operator [] zu folgenden Zwecken in einem Pfad verwenden: Wenn Sie einen Zielpfad mit dem Operator [] angeben, um einen Array-Eintrag zu erstellen, und dieser Pfad in ein bereits vorhandenes JSON-Objektelement in der Baumstruktur aufgelöst wird, tritt eine Ausnahmebedingung auf.

Der PHPCompute-Knoten unterstützt die PHP-Konstante MB_JSON_ARRAY, die Sie in der MbElement-Methode setType() verwenden können, um aus einem vorhandenen JSON-Element ein JSON-Array zu machen. Diese Methode wird normalerweise verwendet, wenn Elemente durch Kopieren aus einer Baumstruktur, die zu einer anderen Parserdomäne gehört, erstellt wurden.

Um auf einen vorhandenen Wert eines JSON-Array-Eintrags in einer Baumstruktur zuzugreifen oder diesen zu ändern, können Sie einen Array-Index ([index]) verwenden, um den erforderlichen Eintrag auszuwählen. JSON-Array-Einträge können in der JSON-Baumstruktur nicht mit dem Format [index] erstellt werden. Falls Sie dies dennoch versuchen, wird eine Ausnahmebedingung ausgelöst.

Mithilfe eines Indexschlüsselnamens können Sie auch auf Nicht-Array-Elemente in der JSON-Domänenbaumstruktur zugreifen, als ob die Baumstruktur ein assoziatives Array wäre. Verwenden Sie beispielsweise folgende Pfadanweisung, um ein Element namens street auszuwählen, das ein untergeordnetes Element des Elements address ist:
->address['street']

Die folgenden Beispiele veranschaulichen, wie Sie PHP-Arrays mit JSON verwenden können:

JSON-Arraynachricht aus einzelnen PHP-Variablen erstellen

Wenn Sie ein JSON-Array erstellen und ihm Einträge anfügen möchten, können Sie den Operator zum Anhängen eines Array-Index ([]) verwenden:
    $strVar = "this";
    $boolVar = true;
    $output_assembly->JSON->Data[] = $strVar;
    $output_assembly->JSON->Data[] = $boolVar;

Wenn Sie Einträge an ein vorhandenes Array anfügen möchten, müssen Sie den Operator zum Anhängen eines Array-Index ([]) verwenden. In diesem Fall können Sie das Format [index] nicht verwenden.

Es wird folgende Nachrichtenbaumstruktur des Brokers generiert:
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Array     ): Data = (  
        (0x03000000:NameValue): Item = 'this' (CHARACTER)
        (0x03000000:NameValue): Item = TRUE (BOOLEAN)
      )
  )
Diese Nachrichtenbaumstruktur wird in den folgenden JSON-Bitstrom serialisiert:
["this",true]
Sie können dieses Beispiel so erweitern, dass ein mehrdimensionales JSON-Array erstellt wird:
$output_assembly->JSON->Data[][] = '00';
$data = $output_assembly->JSON->Data;
$data[0][] = '01';
$data[][]  = '10';
$data[1][] = '11';
Die resultierende Nachrichtenbaumstruktur wird in den folgenden JSON-Bitstrom serialisiert:
[["00","01"],["10","11"]]

JSON-Arraynachricht aus einem indexierten PHP-Array erstellen

Sie können ein PHP-Array mit fortlaufenden ganzzahligen Schlüsseln erstellen und es dem Nachrichtenbaumstrukturelement zuordnen, das das JSON-Array bildet:
    $arr = array("this", "that");
    $output_assembly->JSON->Data = $arr;
Es wird folgende Nachrichtenbaumstruktur des Brokers generiert:
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Array     ): Data = (  
        (0x03000000:NameValue): 0 = 'this' (CHARACTER)
        (0x03000000:NameValue): 1 = 'that' (CHARACTER)
      )
  )
Diese Nachrichtenbaumstruktur wird in den folgenden JSON-Bitstrom serialisiert:
["this", "that" ] 

JSON-Objektnachricht aus einem assoziativen PHP-Array erstellen

Dieses Beispiel zeigt, wie ein PHP-Array mit benannten Schlüsseln erstellt wird und dem Nachrichtenbaumstrukturelement zugeordnet wird, das das JSON-Objekt bilden soll:
    $arr = array('first' => "1st", 'second' => "2nd");
    $output_assembly->JSON->Data = $arr;
Es wird folgende Nachrichtenbaumstruktur des Brokers generiert:
  (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01000000:Object  ): Data = (
        (0x03000000:NameValue): first = '1st' (CHARACTER)
        (0x03000000:NameValue): second = '2nd' (CHARACTER)
      )
  )
Sie können mithilfe des Schlüsselnamens im Array-Index auf die Array-Elemente zugreifen:
$var1 = $output_assembly->JSON->Data['second']; // 2nd
$var2 = $output_assembly->JSON->Data['none'];   // null
Dies wird in den folgenden JSON-Bitstrom serialisiert:
{"first":"1st","second":"2nd"} 

JSON-Nachricht aus einem mehrdimensionalen PHP-Array mit Ganzzahlindex erstellen

Sie können das Array dem Element zuordnen, das die Daten enthalten soll. Die höchste Ebene und die Verschachtelungsebene des PHP-Arrays sind mit Ganzzahlen indexierte Arrays, deshalb werden beide als JSON-Arrays erstellt, sodass sich ein mehrdimensionales JSON-Array ergibt:
$arr = array(array("a1","a2"),array("b1","b2"));
$output_assembly->JSON->Data = $arr;
Es wird folgende Nachrichtenbaumstruktur des Brokers generiert:
 (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)
        )
      )
  )
Diese Nachrichtenbaumstruktur wird in den folgenden JSON-Bitstrom serialisiert:
[["a1","a2"],["b1","b2"]]

JSON-Nachricht aus einem gemischten assoziativen und mehrdimensionalen mit Ganzzahlen indexierten PHP-Array erstellen

Sie können das Array dem Element zuordnen, das die Daten enthalten soll. Die höchste Ebene des PHP-Arrays ist assoziativ, mit Zeichenfolgeschlüsselnamen, und wird deshalb zu einem JSON-Objekt. Die Verschachtelungsebene des PHP-Arrays verwendet mit Ganzzahlen indexierte Arrays und wird als JSON-Array erstellt.
$arr = array("top1" => array("a1","a2"), "top2" => array("b1","b2"));
$output_assembly->JSON->Data = $arr;
Aus dem obigen Beispiel wird folgende Nachrichtenbaumstruktur des Brokers generiert:
 (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)
        )
      )
  )
Diese Nachrichtenbaumstruktur wird in den folgenden JSON-Bitstrom serialisiert:
{"top1":["a1","a2"],"top2":["b1","b2"]}

JSON-Array in der logischen Baumstruktur aktualisieren

[["a1","a2"],["b1","b2"]]
Aus der obigen JSON-Eingabe wird folgende Nachrichtenbaumstruktur des Brokers generiert:
 (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)
        )
      )
  )
Sie können diese Nachricht mit PHP aktualisieren, indem Sie für das Element, das das Array enthält, [index] verwenden, um auf vorhandene Elemente zuzugreifen, und das Format [] zum Erstellen zusätzlicher Elemente verwenden:
output_assembly->JSON->Data[0][0] = "A1";
output_assembly->JSON->Data[1][1] = "B2";
output_assembly->JSON->Data[1][] = "New3";
In diesem Beispiel wird folgende JSON-Ausgabe erstellt:
[["A1","a2"],["b1","B2","new3"]]

Untergeordnete Nachrichtenbaumstruktur für XML-Domäne mit sich wiederholenden Elementen in eine JSON-Domänenbaumstruktur kopieren und mit PHP in ein JSON-Array konvertieren

Sie können die PHP-Konstante MB_JSON_ARRAY verwenden, um den Arraytyp eines Nachrichtenbaumstrukturelements explizit zu testen und festzulegen. Sie können MB_JSON_ARRAY beispielsweise verwenden, wenn Sie Nachrichtenbaumstrukturdaten aus einer XML-Domäne in eine JSON-Domäne oder aus einer JSON-Domäne in eine XML-Domäne kopieren. Die folgende XML-Eingabe enthält sich wiederholende Elemente:
<doc>
      <cats>
        <cat>thing1</cat>
        <cat>thing2</cat>
      </cats>
</doc>
Die folgende Nachrichtenbaumstruktur des Brokers wird vom XMLNSC-Parser generiert:
(0x01000000:Folder):XMLNSC     = ( ['xmlnsc' : 0xhhhhhh]
      (0x01001000:Folder     ): doc = (
        (0x01001000:Folder     ): cats = (
          (0x03000000:NameValue): cat = 'thing1' (CHARACTER)
          (0x03000000:NameValue): cat = 'thing2' (CHARACTER)
        )
      )
 )
Der Nachrichtenfluss kann diese Nachrichtenbaumstruktur des Brokers in eine JSON-Nachricht konvertieren, die wie folgt serialisiert werden soll:
{"cats":["thing1","thing2"]}
Sie können die Nachricht, wie im folgenden Beispiel gezeigt, mit PHP umsetzen:
$output_assembly->JSON->Data = $input_assembly->XMLNSC->doc;
$output_assembly->JSON->Data->cats->setType(MB_JSON_ARRAY);
Bei dieser Umsetzung wird die folgende Nachrichtenbaumstruktur generiert, die in das JSON-Format serialisiert wird:
(Message):JSON     = ( ['json' : 0xhhhhhh]
    (0x01000000:Obejct):Data     = (
        (0x01001000:Array     ): cats = (
          (0x03000000:NameValue): cat = 'thing1' (CHARACTER)
          (0x03000000:NameValue): cat = 'thing2' (CHARACTER)
        )
     )
 )

Mit JSON-Objekten mit sich wiederholendem Namen arbeiten

Die JSON-Spezifikation gibt an, dass JSON-Objekte keine doppelten Namen haben sollten. Es ist jedoch möglich, dass eine Nachricht dieses Format enthält. In der folgenden JSON-Nachricht wird beispielsweise der Name cat wiederholt:
{"cat":"thing1","cat":"thing2" }
Aus der obigen JSON-Eingabe generiert der JSON-Parser folgende Nachrichtenbaumstruktur des Brokers:
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Object     ): Data = (
        (0x03000000:NameValue): cat = 'thing1' (CHARACTER)
        (0x03000000:NameValue): cat = 'thing2' (CHARACTER)
      )
  )

Dies ist eine ungültige PHP-Datenstruktur, da sie einen doppelten Schlüssel enthält, was in einem assoziativen Array nicht vorkommen darf. Als Ergebnis kann auf diese Form von JSON-Daten über einen PHPCompute-Knoten nicht zugegriffen werden und sie können nicht erstellt oder geändert werden. Um diese Art von JSON-Daten verarbeiten zu können, muss der Nachrichtenfluss entweder ESQL oder Java™ verwenden.

Bemerkungen | Marken | Downloads | Bibliothek | Support | Feedback

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

        
        Letzte Aktualisierung:
        
        Letzte Aktualisierung: 2015-02-28 16:22:34


KonzeptthemaKonzeptthema | Version 8.0.0.5 | bc28414