有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当试图用一个JSONArray解析JSONObject时,java会出现空JSON响应

我得到了获取JSONArrays的代码,但是当我试图获取只包含一个JSONArrayJSONObject时,它会给我空的JSONArray

例如,如果我需要从这个JSONObject获取数据:

{"events":[{"start":1357714800,"end":1357736400,"name":"Example1","description":""}]}

我将{"events":[]}作为JSONObject[]表示它不包含任何JSONArray。在本例中,JSONObject的长度也是0。但它不会抛出任何类型的Exceptions

但是如果JSONObject包含多个JSONArrays如下所示:

{"events":[{"start":1357714800,"end":1357736400,"name":"Example1","description":""},{"start":1357714600,"end":1357736500,"name":"Example2","description":""},{"start":1357514800,"end":1357536400,"name":"Example3","description":""}]}

那么我的代码就完美了

下面是我用来解析JSON的代码:

private void getObjects(String url) throws JSONException, Exception {
        JSONObject jsonObject = new JSONObject(new NetTask().execute(url).get());
        JSONArray job1 = jsonObject.getJSONArray("events");
        System.out.println(jsonObject.toString());
        System.out.println("JOB1 LENGTH: "+job1.length());
        for (int i = 0; i < job1.length(); i++) {
            JSONObject jsonEvent = job1.getJSONObject(i);
            int start = jsonEvent.getInt("start");
            int end = jsonEvent.getInt("end");
            String name = jsonEvent.getString("name");
            String description = jsonEvent.getString("description");
        }
    }

    public class NetTask extends AsyncTask<String, Integer, String>
    {
        @Override
        protected String doInBackground(String... params)
        {
            String jsonText = "";
            BufferedReader reader = null;
            try {
                URL url = new URL(params[0]);
                reader = new BufferedReader(new InputStreamReader(url.openStream()));
                StringBuffer buffer = new StringBuffer();
                int read;
                char[] chars = new char[1024];
                while ((read = reader.read(chars)) != -1) {
                    buffer.append(chars, 0, read);
                }

                jsonText = buffer.toString();
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
            return jsonText;
        }
    }

我是不是遗漏了什么问题,或者这是正常的行为


共 (1) 个答案

  1. # 1 楼答案

    我尝试了您给定的代码(尽管我只是让AsyncTask只返回单个数组字符串,并且必须用jsonEvent替换opptunti.getString()内容)。getString())。除了您可能正在阻塞UI线程以等待服务器响应之外,它工作得很好

    我猜问题在于你点击了错误的URL,参数错误或者类似的东西