#java #json #wso2 #aggregate #wso2esb
Вопрос:
Я пытаюсь преобразовать свой агрегированный список ответов списка wso2 в единый список. Но посредник скрипта не работает. поэтому я пытаюсь использовать пользовательский посредник. Эта посредническая функция заключается в,
public void process(MessageContext mc) {
String s = (String)mc.getProperty("data")).toString();
ArrayList<String> list = new ArrayList<String>();
JSONArray jsonArray = new JSONArray(s);
if (jsonArray != null) {
int len = jsonArray.length();
int len2 = 0;
JSONArray j2;
for (int i=0;i<len;i ){
j2 = new JSONArray(jsonArray.get(i));
len2 = j2.length();
for (int j=0;j<len2;j ){
list.add(j2.get(j).toString());
}
}
}
mc.setProperty("data", list.toString());
}
но когда я его использую, возникает ошибка. Есть ли какой — либо возможный способ сделать это. без использования пользовательского посредника.
В основном мое значение параметра «данные» выглядит примерно так,
[
[{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'}],
[{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'}],
[{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'}]
]
что мне нужно после посредничества, так это,
[
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'},
{'a1':12,'b1':'sd'}]
Пожалуйста, помогите мне.
Ответ №1:
Можете ли вы подтвердить, что вы получаете data
запись в формате, принятом в формате JSON (с вложением двойных кавычек, а не одинарных кавычек)?
Например
[
[{"a1": 12,"b1": "sd"},{"a1": 12,"b1": "sd"}],
[{"a1": 12,"b1": "sd"},{"a1": 12,"b1": "sd"}],
[{"a1": 12,"b1": "sd"},{"a1": 12,"b1": "sd"}]
]
Если да, то измените указанную логику посредника класса следующим образом и опробуйте сценарий
import java.util.ArrayList;
import org.apache.synapse.MessageContext;
import org.apache.synapse.commons.json.JsonUtil;
import org.apache.synapse.core.axis2.Axis2MessageContext;
import org.apache.synapse.mediators.AbstractMediator;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;
public boolean mediate(MessageContext mc) {
...
String dataBody = (String) mc.getProperty("data");
ArrayList<JSONObject> listdata = new ArrayList<JSONObject>();
JSONArray jArray = new JSONArray(dataBody);
if (jArray != null) {
int len = jArray.length();
int len2 = 0;
JSONArray jArray2;
for (int i = 0; i < len; i ) {
jArray2 = jArray.getJSONArray(i);
len2 = jArray2.length();
for (int j = 0; j < len2; j ) {
listdata.add(jArray2.getJSONObject(j));
}
}
}
log.info("JSON Array: " listdata.toString());
JSONArray mod = new JSONArray(listdata);
...
}
Комментарии:
1. Спасибо вам за ответ. Я нашел другой способ сделать это без использования пользовательского посредника. В wso2 мы можем просто использовать json-eval($.data[ ][ ]) для преобразования списка списка в один список
2. Снова добавляем выражение JSON-Eval (без какого-либо формата):
json-eval($.data[*][*])