| Products | Versions |
|---|---|
| TIBCO BusinessEvents Enterprise Edition | 5.5.0 |
To return each value from JSON string array you can loop throw node elements and check for the key.
eg:
JSON String:
{"MainNode": {"ArrayNode": [{"retValue": "Error_1","message": "No data"},{"retValue": "Error_2","message": "Data incomplete"}],"retValue": "NOT_OK"}}";
A Rulefunction should return a String array that includes all "retValues" of json node "ArrayNode". In sample RuleFunction returns "String[]{"Error_1","Error_2"}".
//=====================================================================================
String[] rulefunction RuleFunctions.rfJsonRetAllArrayCodeElementsUsingArrayList {
scope {
String pjsonStr;
String pjsonNodename;
String pjsonElement;
}
body {
Object jsonNode = JSON.parseJSON(pjsonStr);
Object jsonNodeError =JSON.findValueNode(jsonNode,pjsonNodename);
Object itJsonFields = JSON.getAllElements(jsonNodeError);
int i=0;
Object oValueList=Collections.List.createArrayList();
while(Collections.Iterator.hasNext(itJsonFields)) {
Object element = Collections.Iterator.next(itJsonFields);
Object fieldMap = JSON.getFields(element);
while(Collections.Iterator.hasNext(fieldMap))
{
Object fieldEntry = Collections.Iterator.next(fieldMap);
//System.debugOut("### " + Collections.Map.Entry.getKey(fieldEntry) + " :" + Collections.Map.Entry.getValue(fieldEntry));
if (Collections.Map.Entry.getKey(fieldEntry)==pjsonElement) {
System.debugOut("### Array node " + pjsonNodename + "found value for element "+ pjsonElement + "=" + Collections.Map.Entry.getValue(fieldEntry));
Collections.List.add(oValueList,i,Collections.Map.Entry.getValue(fieldEntry));
i++;
}
}
}
String[] sArrRet=String[i]{};
for (int iCnt=0;iCnt<i;iCnt++)
sArrRet[iCnt]=Collections.List.get(oValueList,iCnt);
return sArrRet;
}
}
//=====================================================================================
String jsonStr="{\"MainNode\": {\"ArrayNode\": [{\"retValue\": \"Error_1\",\"message\": \"No data\"},{\"retValue\": \"Error_2\",\"message\": \"Data incomplete\"}],\"retValue\": \"NOT_OK\"}}";
String[] sRet = RuleFunctions.rfJsonRetAllArrayCodeElementsUsingArrayList(jsonStr,"ArrayNode","retValue");