Как проанализировать вложенный json кодированный массив внутри массива БЕЗ ИМЯ КЛЮЧА в android, используя метод json? - PullRequest
0 голосов
/ 09 января 2020

Я пытаюсь получить значения из php, используя синтаксический анализатор json, но я застрял во вложенном массиве при разборе, когда я пытаюсь получить URL-адрес изображения, который является вложенным, он преобразуется как одна целая строка, и это также в другом формате, [не в формате URL]. Я перепробовал все примеры переполнения стека, но я не могу найти решение для этого. Pls. помогите мне решить эту проблему.

JSON

    {
    "result_data": [
        {
            "images": [
                "uploads/news_feeds/08_01_2020/news_080120201201140.png",
                "uploads/news_feeds/08_01_2020/news_080120201201141.png"
            ],
            "videos": [],
            "audios": [],
            "title": "test1",
            "description": "test"
        },
        {
            "images": [],
            "videos": [],
            "audios": [],
            "title": "test3",
            "description": "test333333333333"
        },
        {
            "images": [],
            "videos": [],
            "audios": [],
            "title": "test5",
            "description": "test55555555555555555555"
        },
        {
            "images": [],
            "videos": [],
            "audios": [],
            "title": "aasa",
            "description": "asdsadasdad"
        }
    ],
    "result_message": "success",
    "result_status": 1
}

Мой код, который я обрабатываю

   protected void onPostExecute(String Image_result) {

        String Title;
        String Description;
        JSONArray Images = null;
        String Audios;
        String Videos;

        JSONObject jsonObjects = null;
        try {
            jsonObjects = new JSONObject(Image_result);
            jsonArray_New = jsonObjects.getJSONArray("result_data");

            if(jsonArray_New!=null){
                try
                {
                    for (int i = 0; i < jsonArray_New.length(); i++)
                    {
                        JSONObject jsonObject = jsonArray_New.getJSONObject(i);

                        Images = jsonObject.getJSONArray("images");

                        for (int j = 0; j < Images.length(); j++)
                        {

                            JSONObject imgObjects = Images.getJSONObject(j);
                            Imagess[j] = imgObjects.getString( "" );

                            Log.d(" Imagess[j]" , "" +  Imagess[j] );
                            Toast.makeText( MainActivity.this , "res" + Imagess[j] ,Toast.LENGTH_LONG ).show();

                        }



                        //Videos = jsonObject.getString("videos");
                        Title = jsonObject.getString("title");
                        Description = jsonObject.getString("description");
                        //Audios = jsonObject.getString("audios");
                        Log.d("printjs" , "" + Images );
                        Log.d("printjs" , "" + Title );

                    }
                } catch (JSONException e)
                {
                    e.printStackTrace();
                }
            }
        } catch (JSONException e1) {
            e1.printStackTrace();
        }
    }

Название загружается правильно, но в части изображений это извлекает, но показывает, что тип java .lang.String не может быть преобразован в JSONObject как ошибка в logcat.

Я не знаю, это правильный способ разбора json, любой поможет мне исправить эта проблема.

Logcat

01-09 02:26:53.789 19670-19670/com.example.myapplication W/System.err: org.json.JSONException: Value uploads/news_feeds/08_01_2020/news_080120201201140.png at 0 of type java.lang.String cannot be converted to JSONObject
01-09 02:26:53.791 19670-19670/com.example.myapplication W/System.err:     at org.json.JSON.typeMismatch(JSON.java:100)
01-09 02:26:53.791 19670-19670/com.example.myapplication W/System.err:     at org.json.JSONArray.getJSONObject(JSONArray.java:514)
01-09 02:26:53.791 19670-19670/com.example.myapplication W/System.err:     at com.example.myapplication.MainActivity$Image_data.onPostExecute(MainActivity.java:99)
01-09 02:26:53.791 19670-19670/com.example.myapplication W/System.err:     at com.example.myapplication.MainActivity$Image_data.onPostExecute(MainActivity.java:41)
01-09 02:26:53.791 19670-19670/com.example.myapplication W/System.err:     at android.os.AsyncTask.finish(AsyncTask.java:632)
01-09 02:26:53.791 19670-19670/com.example.myapplication W/System.err:     at android.os.AsyncTask.access$600(AsyncTask.java:177)
01-09 02:26:53.791 19670-19670/com.example.myapplication W/System.err:     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
01-09 02:26:53.792 19670-19670/com.example.myapplication W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:110)
01-09 02:26:53.792 19670-19670/com.example.myapplication W/System.err:     at android.os.Looper.loop(Looper.java:193)
01-09 02:26:53.792 19670-19670/com.example.myapplication W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:5333)
01-09 02:26:53.792 19670-19670/com.example.myapplication W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
01-09 02:26:53.792 19670-19670/com.example.myapplication W/System.err:     at java.lang.reflect.Method.invoke(Method.java:515)
01-09 02:26:53.792 19670-19670/com.example.myapplication W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
01-09 02:26:53.792 19670-19670/com.example.myapplication W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
01-09 02:26:53.793 19670-19670/com.example.myapplication W/System.err:     at dalvik.system.NativeStart.main(Native Method)

1 Ответ

0 голосов
/ 09 января 2020

Ваша проблема заключается в вашем внутреннем ... 1004 *, где вы захватываете изображения JSONObject imgObjects = Images.getJSONObject(j);. Вот ваше исправление:

for (int j = 0; j < Images.length(); j++)
{
      // remove these lines:
      // JSONObject imgObjects = Images.getJSONObject(j);
      // Imagess[j] = imgObjects.getString( "" );

      // add this line instead
      Imagess[j] = Images.getString(j);

      Log.d(" Imagess[j]" , "" +  Imagess[j] );
      Toast.makeText( MainActivity.this , "res" + Imagess[j] ,Toast.LENGTH_LONG ).show();

 }
...