Modification d'un message JSON
Vous pouvez modifier des objets JSON et des tableaux JSON.
Les flux de données JSON sont analysés dans l'arborescence de messages logique et placés sous l'élément
Data appartenant à la racine de l'analyseur JSON . Les objets de données JSON et les tableaux peuvent être accessibles et modifiés à partir de chaque langage pris en charge comme suit:- ESQL en tant que
OutputRoot.JSON.Data.path to required object or array - Java™ en tant que
/JSON/Data/path to required object or array
Vous pouvez également manipuler des messages JSON dans l' éditeur de mappage de données graphiques. Pour plus d'informations, voir Création ou transformation d'un message de sortie JSON à l'aide d'une mappe de messages.
L'exemple suivant illustre un message JSON possible:
{
"name" : "John Doe",
"age" : -1,
"known" : false,
"address" : { "street" : null,
"city" : "unknown" },
"belongings" : ["this", "that", "the other"]
}L'analyseur syntaxique JSON analyse le flux de bits JSON d'entrée pour générer l'arborescence de messages logique de noeud d'intégration suivante:
(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)
)
)
)Cette arborescence de messages peut être modifiée via ESQL comme suit:
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';L'arborescence de messages peut être modifiée via Java comme suit:
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 avec un tableau multidimensionnel
L'exemple suivant illustre une entrée JSON contenant un tableau multidimensionnel:
{
"customer" : "Joe",
"orders" : [ [ "thing1", 1, 10.1 ],
[ "thing2", 2, 20.2 ] ]
}L'arborescence de messages de noeud d'intégration suivante est générée:
(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)
)
)
)
)Cette arborescence de messages est accessible via ESQL de la manière suivante (vous pouvez utiliser le nom Item ou un astérisque (*) comme caractère générique):
InputRoot.JSON.Data.orders.Item[1].Item[1] -- 'thing1'
InputRoot.JSON.Data.orders.*[2].*[3] -- 2.02E+1
L'arborescence de messages est accessible via Java de la manière suivante (vous pouvez utiliser le nom Item, que l'analyseur JSON donne aux éléments de tableau, ou un astérisque (*) comme caractère générique):
inMessage.getRootElement().getFirstElementByPath("/JSON/Data/orders/Item[1]/Item[1]"); // 'thing1'
inMessage.getRootElement().getFirstElementByPath("/JSON/Data/orders/*[2]/*[3]"); // '2.02'