如何使用json方法解析android中没有键名的数组内的嵌套json编码数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用json方法解析android中没有键名的数组内的嵌套json编码数组?相关的知识,希望对你有一定的参考价值。

[我正在尝试使用json解析器从php获取值,但是在解析时我一直卡在嵌套数组中,当我尝试获取嵌套的图片网址时,它会转换为一个完整的字符串,而且格式也不同,[不是网址格式]。我已经尝试了所有堆栈溢出示例,但是找不到解决方案。请帮助我解决此问题。

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不能转换为logObject中的错误作为JSONObject。

我不知道这是解析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)
答案

您的问题在于您要捕获图像的内部for循环JSONObject imgObjects = Images.getJSONObject(j);。这是您的解决方法:

以上是关于如何使用json方法解析android中没有键名的数组内的嵌套json编码数组?的主要内容,如果未能解决你的问题,请参考以下文章

使用 TSQL OPENJSON 如何从具有动态键名的 JSON 数组中提取值

更改没有键名的json值

如何使用 Angular 在 HTML 中访问没有键名的数组对象

在不知道键名的情况下访问 JSON 对象的元素

从带有键名的 JSON 中提取值在 bigquery 中包含 #

如何反序列化具有动态(数字)键名的子对象?