Как извлечь вложенные элементы json в поток мулов, не изменяя его на Object?
У меня есть требование, в котором мне нужно извлечь значение ключа из входных данных JSON в поток мулов, чтобы проверить условие в управлении потоком выбора. Мой JSON примерно такой, и я хочу извлечь "todelete". Я не хочу менять свой JSON на Object. Пожалуйста, предложите.
[
{
"selectiontypeid" : 133,
"internalrecipientstatusid" : 123,
"createdby" : "Anu",
"createddate" : "06/26/2017",
"authorizedby" : "Anu",
"authorizeddate" : "06/26/2017",
"individualdata" :
[
{ "intexchangegroupname" : "abc", "employeename" : "abc", "todelete" : "Y"},
{ "intexchangegroupname" : "abc", "employeename" : "abc", "todelete" : "N"},
{ "intexchangegroupname" : "abc", "employeename" : "abc", "todelete" : "N"}
]
}
]
5 ответов
todelete
само по себе не имеет никакого смысла для меня. Вы, вероятно, хотите individualdata
массив, верно?
просто используйте следующий MEL #[payload.individualdata]
или следующее dataweave:
%dw 1.0
%output application/json
---
payload.individualdata
что приведет к следующему json:
[
[
{
"intexchangegroupname": "abc",
"employeename": "abc",
"todelete": "Y"
},
{
"intexchangegroupname": "abc",
"employeename": "abc",
"todelete": "N"
},
{
"intexchangegroupname": "abc",
"employeename": "abc",
"todelete": "N"
}
]
]
если вы хотите избавиться от внешнего массива, примените flatten
на payload.individualdata
в ткани данных.
Я надеюсь, что следующий код будет соответствовать вашим требованиям
payload.individualdata[0].*todelete
Так же, как xpath3(), MEL имеет JsonPath для доступа к значениям из строки json. Синтаксис:
[JSON:yourpath/ узел]
Выше работает сейчас, я должен был изменить вывод application/java
и это сработало. Спасибо всем за помощь.
Я создал методы для и сохраните файл JSON в папке активов попробуйте это.
public static String loadJSONFromAsset(Context context,String
filename) {
String json = null;
try {
InputStream is = context.getAssets().open(filename);
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}
а потом
public void loadJson(){
try {
JSONArray mainResposeArray = new JSONArray(Utilities.loadJSONFromAsset(Activity.this,"demo.json"));
JSONObject mJsonObject = mainResposeArray.getJSONObject(0);
JSONArray itemArray = mJsonObject.getJSONArray("individualdata");
if(itemArray.length() > 0){
for(int pos = 0; pos<itemArray.length();pos++){
JSONObject mSubDataObject = itemArray.getJSONObject(pos);
String intexchangegroupname = mSubDataObject.getString("intexchangegroupname");
String todelete = mSubDataObject.getString("todelete");
Log.d("value",intexchangegroupname);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}