WebSphere Message Broker, Versión 8.0.0.5 Sistemas operativos: AIX, HP-Itanium, Linux, Solaris, Windows, z/OS

Consulte la información sobre la última versión del producto en IBM Integration Bus, Versión 9.0

Utilización de matrices PHP con JSON

Las matrices PHP son correlaciones asociativas, en las que la clave puede ser un entero o una serie.

Las claves de enteros se pueden asignar automáticamente en orden ascendente secuencial, para trabajar de la misma manera que una matriz indexada con enteros tradicional. PHP da soporte a un operador de índice vacío ([]) que se puede utilizar en el lado izquierdo de una asignación para agregar un elemento a la matriz, utilizando un índice entero con el valor más alto del índice más 1.

Las matrices PHP asociativas se modelan como estructuras de objetos JSON, porque las matrices JSON son anónimas.

Los valores en un árbol lógico JSON se pueden establecer utilizando cualquiera de los tipos nativos PHP, incluidos matrices. El tipo de matriz determina la forma del árbol lógico JSON resultante: Cuando una variable de matriz PHP multidimensional se asigna a una vía de acceso de árbol de dominio JSON, estas reglas se aplican a cada dimensión de la variable de matriz, de modo que se forma una matriz u objeto JSON adecuado en el árbol de mensaje para modelar cada dimensión de la matriz PHP.
Cuando se crea un árbol de mensaje JSON en PHP utilizando las asignaciones de valores individuales, puede crear elementos de matriz JSON añadiendo la vía de acceso de destino con el operador append de matriz PHP ([]) en la asignación. Puede utilizar el operador [] en una vía de la siguiente manera: Si intenta crear un elemento de matriz utilizando una vía de acceso de destino con el operador [] y la vía de acceso se resuelve en un elemento de objeto JSON existente en el árbol, se genera una excepción.

El nodo PHPCompute da soporte a la constante PHP MB_JSON_ARRAY, que puede utilizar en el método setType() de MbElement para cambiar un elemento de objeto JSON existente en una matriz JSON. Este método se utiliza generalmente cuando los elementos se han creado copiándolos de un árbol propiedad de otro dominio de analizador.

Para acceder o cambiar un valor existente de un elemento de matriz JSON en un árbol, puede utilizar un índice de matriz ([index]) para seleccionar el elemento necesario. Los elementos de la matriz JSON no se pueden crear en el árbol de JSON utilizando el formato [index]; intentar hacerlo dará como resultado una excepción.

También puede acceder a elementos que no sean de la matriz en el árbol de dominio JSON, como si el árbol fuera una matriz asociativa, utilizando un nombre de clave de índice. Por ejemplo, para seleccionar un elemento denominado street, que es hijo de un elemento denominado address, utilice la construcción de vía de acceso siguiente:
->address['street']

Los ejemplos siguientes muestran cómo puede utilizar matrices PHP con JSON:

Creación de un mensaje de matriz JSON a partir de variables PHP individuales

Puede crear una matriz JSON y agregar elementos a la misma utilizando una vía de destino con un operador de índice de agregación de matriz ([])
    $strVar = "this";
    $boolVar = true;
    $output_assembly->JSON->Data[] = $strVar;
    $output_assembly->JSON->Data[] = $boolVar;

Debe utilizar el operador de índice de agregar matriz ([]) para agregar a una matriz; no puede utilizar el formato [index].

Se genera el siguiente árbol de mensaje del intermediario:
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Array     ): Data = (  
        (0x03000000:NameValue): Item = 'this' (CHARACTER)
        (0x03000000:NameValue): Item = TRUE (BOOLEAN)
      )
  )
Este árbol de mensaje se serializará en la corriente de bits JSON siguiente:
["this",true]
Puede ampliar este ejemplo para crear una matriz JSON multidimensional:
$output_assembly->JSON->Data[][] = '00';
$data = $output_assembly->JSON->Data;
$data[0][] = '01';
$data[][]  = '10';
$data[1][] = '11';
El árbol de mensaje resultante se serializará en la corriente de bits JSON siguiente:
[["00","01"],["10","11"]]

Creación de un mensaje de matriz JSON a partir de una matriz PHP indexada

Puede crear una matriz PHP con claves de enteros contiguos y asignarlo al elemento de árbol de mensaje que desee para formar la matriz JSON:
    $arr = array("this", "that");
    $output_assembly->JSON->Data = $arr;
Se genera el siguiente árbol de mensaje del intermediario:
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Array     ): Data = (  
        (0x03000000:NameValue): 0 = 'this' (CHARACTER)
        (0x03000000:NameValue): 1 = 'that' (CHARACTER)
      )
  )
Este árbol de mensaje se serializará en la corriente de bits JSON siguiente:
["this", "that" ] 

Creación de un mensaje de objeto JSON a partir de una matriz PHP asociativa

En este ejemplo se muestra cómo crear una matriz PHP con las claves indicadas y asignarla al elemento de árbol de mensaje que desea formar el objeto JSON:
    $arr = array('first' => "1st", 'second' => "2nd");
    $output_assembly->JSON->Data = $arr;
Se genera el siguiente árbol de mensaje del intermediario:
  (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01000000:Object  ): Data = (
        (0x03000000:NameValue): first = '1st' (CHARACTER)
        (0x03000000:NameValue): second = '2nd' (CHARACTER)
      )
  )
Puede acceder a los elementos de la matriz utilizando el nombre de clave en el índice de la matriz:
$var1 = $output_assembly->JSON->Data['second']; // 2nd
$var2 = $output_assembly->JSON->Data['none'];   // null
Esto se serializará en la corriente de bits JSON siguiente:
{"first":"1st","second":"2nd"} 

Creación de un mensaje JSON a partir de una matriz PHP multidimensional indexada con enteros

Puede asignar la matriz al elemento que va a contener los datos. El nivel superior y el nivel anidado de la matriz PHP son matrices indexadas con enteros, por lo que ambos se crean como matrices JSON, teniendo como resultado una matriz JSON multidimensional:
$arr = array(array("a1","a2"),array("b1","b2"));
$output_assembly->JSON->Data = $arr;
Se genera el siguiente árbol de mensaje del intermediario:
 (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)
        )
      )
  )
Este árbol de mensaje se serializará en la corriente de bits JSON siguiente:
[["a1","a2"],["b1","b2"]]

Creación de un mensaje JSON a partir de una matriz PHP multidimensional indexada con enteros mezclada con otra matriz asociativa

Puede asignar la matriz al elemento que va a contener los datos. El nivel superior de la matriz PHP es asociativo, con los nombres clave de series, por lo que se convierte en un objeto JSON. El nivel anidado de la matriz PHP utiliza matrices indexadas con enteros y se crea como una matriz JSON.
$arr = array("top1" => array("a1","a2"), "top2" => array("b1","b2"));
$output_assembly->JSON->Data = $arr;
Se genera el siguiente árbol de mensaje del intermediario a partir del ejemplo anterior:
 (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)
        )
      )
  )
Este árbol de mensaje se serializará en la corriente de bits JSON siguiente:
{"top1":["a1","a2"],"top2":["b1","b2"]}

Actualización de una matriz JSON en el árbol lógico

[["a1","a2"],["b1","b2"]]
Se genera el siguiente árbol de mensaje del intermediario a partir de la entrada JSON anterior:
 (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)
        )
      )
  )
Puede actualizar este mensaje con PHP, utilizando [index] en el elemento que contiene la matriz para acceder a elementos existentes, y el formato [] para crear elementos adicionales:
output_assembly->JSON->Data[0][0] = "A1";
output_assembly->JSON->Data[1][1] = "B2";
output_assembly->JSON->Data[1][] = "New3";
En este ejemplo se genera la salida JSON siguiente:
[["A1","a2"],["b1","B2","new3"]]

Copia de un subárbol de mensaje de dominio XML con elementos de repetición en un árbol de dominio JSON y conversión a una matriz JSON utilizando PHP

Puede utilizar la constante MB_JSON_ARRAY de PHP para probar y establecer de forma explícita el tipo de matriz de un elemento de árbol de mensaje. Por ejemplo, puede utilizar MB_JSON_ARRAY si está copiando datos del árbol de mensaje de un dominio XML a un dominio JSON, o de un dominio JSON a un dominio XML. La entrada XML siguiente contiene elementos de repetición:
<doc>
      <cats>
        <cat>thing1</cat>
        <cat>thing2</cat>
      </cats>
</doc>
El analizador XMLNSC genera el siguiente árbol de mensaje del intermediario:
(0x01000000:Folder):XMLNSC     = ( ['xmlnsc' : 0xhhhhhh]
      (0x01001000:Folder     ): doc = (
        (0x01001000:Folder     ): cats = (
          (0x03000000:NameValue): cat = 'thing1' (CHARACTER)
          (0x03000000:NameValue): cat = 'thing2' (CHARACTER)
        )
      )
 )
El flujo de mensajes puede convertir este árbol de mensaje del intermediario en un mensaje JSON, para que se serialice de la siguiente manera:
{"cats":["thing1","thing2"]}
Puede transformar el mensaje utilizando PHP, tal como se muestra en el ejemplo siguiente:
$output_assembly->JSON->Data = $input_assembly->XMLNSC->doc;
$output_assembly->JSON->Data->cats->setType(MB_JSON_ARRAY);
Esta transformación genera el árbol de mensaje siguiente, que se serializa al formato JSON:
(Message):JSON     = ( ['json' : 0xhhhhhh]
    (0x01000000:Obejct):Data     = (
        (0x01001000:Array     ): cats = (
          (0x03000000:NameValue): cat = 'thing1' (CHARACTER)
          (0x03000000:NameValue): cat = 'thing2' (CHARACTER)
        )
     )
 )

Trabajo con un objeto JSON con un nombre repetido

La especificación JSON indica que los objetos JSON no deben tener nombres duplicados. Sin embargo, es posible que un mensaje contenga este formato; por ejemplo, en el siguiente mensaje JSON el nombre cat se repite:
{"cat":"thing1","cat":"thing2" }
El analizador JSON genera el siguiente árbol de mensaje del intermediario a partir de la entrada JSON anterior:
 (Message):JSON     = ( ['json' : 0xhhhhhh]
      (0x01001000:Object     ): Data = (
        (0x03000000:NameValue): cat = 'thing1' (CHARACTER)
        (0x03000000:NameValue): cat = 'thing2' (CHARACTER)
      )
  )

Esta es una estructura de datos PHP no válida porque tiene una clave duplicada, que no puede existir en una matriz asociativa. Como resultado, no se puede acceder, crear ni modificar esta forma de datos JSON desde un nodo PHPCompute. Para procesar este tipo de datos JSON, el flujo de mensajes debe utilizar ESQL o Java™.

Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Comentarios

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

        
        Última actualización:
        
        Última actualización: 2015-02-28 17:00:55


Tema de conceptoTema de concepto | Versión 8.0.0.5 | bc28414