Как извлечь вложенные элементы 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();
    }

}
Другие вопросы по тегам