java - 如何修复 : Can't parse Json Array. "Not a primitive array"错误

标签 java android arrays json

我无法解析 json 数组。当我尝试时,我收到“不是原始数组错误。 你能帮我找出我的错误吗?

我一直在寻找解决方案,但找不到。

这是我的代码:

    public void tableInit() throws JSONException {
        Log.e("TableInit()", "Start!");
        Log.e("TableInit()", ""+jsonObjectToTable);
        float textSize = 18.0f;
        TableLayout stk = (TableLayout) findViewById(R.id.table_main);
        TableRow tbrow0 = new TableRow(this);

        TextView tv0 = new TextView(this);
        tv0.setText(" ID ");
        tv0.setTypeface(null, Typeface.BOLD); //fett
        tv0.setTextSize(textSize);
        tbrow0.addView(tv0);

       [...]

        stk.addView(tbrow0);


        JSONArray jsonArray = new JSONArray(jsonObjectToTable);

        for(int i = 0; i < jsonArray.length(); ++i)
        {
            // Extract values from JSON row:
            JSONObject jsonObject      = jsonArray.getJSONObject(i);
            Log.e("JsonObject", ""+jsonObject);
            String     id     = jsonObject.has("id")     ? jsonObject.getString("id") : "";
            String     name    = jsonObject.has("name")    ? jsonObject.getString("name") : "";
            String     home = jsonObject.has("home") ? jsonObject.getString("home") : "";
            String     wetsuit     = jsonObject.has("wetsuit")     ? jsonObject.getString("wetsuit") : "";
            String     board     = jsonObject.has("board")     ? jsonObject.getString("board") : "";
            String     rig     = jsonObject.has("rig")     ? jsonObject.getString("rig") : "";
            String     harness     = jsonObject.has("harness")     ? jsonObject.getString("harness") : "";
            String     rent_until     = jsonObject.has("rent_until")     ? jsonObject.getString("rent_until") : "";
            String     renting_date     = jsonObject.has("renting_date")     ? jsonObject.getString("renting_date") : "";

            TableRow tbrow = new TableRow(this);

            TextView textViewId = new TextView(this);
            textViewId.setText(id);
            textViewId.setGravity(Gravity.CENTER);
            tbrow.addView(textViewId);

            [...]
        }

    }

这是创建的 jsonObjectToTable:

        @Override
        protected String doInBackground(String... strings) {
            Log.e("Async", "Async starts!");
            try {
                response = RequestHandler.sendGet("http://192.168.122.1/php/renting_private_select.php");
                return response;

            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }

        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        protected void onPostExecute(String s) {
            try {
                JSONObject tableJson = new JSONObject(s);
                jsonObjectToTable = tableJson;
                tableInit();

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

    }
}

我得到以下日志:

E/TableInit(): Start! E/TableInit(): {"equipment_private": [{"id":"1","name":"Name","home":"Unterkunft","wetsuit":"Anzug","board":"Board","rig":"Segel","harness":"Trapetz","renting_date":"23.01.19","rent_until":"23.12.19"},{"id":"2","name":"Name","home":"Unterkunft","wetsuit":"Anzug","board":"Board","rig":"Segel","harness":"Trapetz2","renting_date":"","rent_until":""}]} W/System.err: org.json.JSONException: Not a primitive array: class org.json.JSONObject W/System.err: at org.json.JSONArray.(JSONArray.java:116) at com.example.surftest.MainActivity.tableInit(MainActivity.java:135) W/System.err: at com.example.surftest.MainActivity$RequestSelectAsync.onPostExecute(MainActivity.java:234) at com.example.surftest.MainActivity$RequestSelectAsync.onPostExecute(MainActivity.java:213) at android.os.AsyncTask.finish(AsyncTask.java:695) at android.os.AsyncTask.access$600(AsyncTask.java:180) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712) W/System.err: at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:193) at android.app.ActivityThread.main(ActivityThread.java:6669) at java.lang.reflect.Method.invoke(Native Method) W/System.err: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

最佳答案

你做错的是你正在创建json数组的对象并传递json对象本身,而在你的json响应中,json数组嵌入到与键“equipment_private”相关的json对象中。
错误方式:
JSONArray jsonArray = new JSONArray(jsonObjectToTable);
正确做法:
JSONArray jsonArray = jsonObjectToTable.getJSONArray("equipment_private")
希望您能理解,这将解决您的问题。

关于java - 如何修复 : Can't parse Json Array. "Not a primitive array"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57758742/

相关文章:

c# - 如何在 C# 中获取对多维数组的单个维度的引用?

java - 运行带有多个参数的 Jar 文件

java - 如何使 * 运算符与 java 中的泛型变量一起使用? - 如果我知道变量是数字类型

javascript - 无法使用 JavaScript 打开 chrome 浏览器

android - 确定点是否在多边形中

javascript - Array.find() 获得正确的值但返回错误的值

c# - 如何在 C# 中将数组作为查询字符串的参数发送?

javascript - IntelliJ 自定义语言插件 - 语言 ID 已注册错误

java - Java中从fb2文件获取图像

android - 如何以正确的格式获取日期