首页 > 解决方案 > 从json获取数组不起作用

问题描述

目前我正在处理一个项目,我需要从远程服务器获取一些数据作为 JSON,然后需要提取数组。在这里,我成功获取了数据,但是问题就在 while 循环附近。

我成功地从远程服务器获取数据。例如,我的远程 url 给出的输出为:

{"id": "1","amount": "1000","course_code": "BASIC","course": "Basic Course","content": "Sample","thumb": "sample.png"},
{"id": "2","amount": "2000","course_code": "ADVANCED","course": "Advanced Course","content": "Sample","thumb": "sample.png"}`

代码

try {
        ur = "http://localhost/getsample.php";
        URL url = new URL(ur);
        HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
        InputStream inputStream = httpURLConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line="";




        while (line !=null){
            line = bufferedReader.readLine();
            data = data+line;
        }
        data = data.replace("null", "");

        JSONArray JA = new JSONArray(data);
        for (int i=0;i<JA.length();i++){
            JSONObject JO = (JSONObject) JA.get(i);
 idArray = idArray + JO.get("id") + ",";
            amountArray = amountArray + JO.get("amount") + ",";
            course_codeArray = course_codeArray + JO.get("course_code") + ",";
            courseArray = courseArray + JO.get("course") + ",";
            contentArray = contentArray + JO.get("content") + ",";
            thumbArray = thumbArray + JO.get("thumb") + ",";
        }


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

标签: javaandroidarrays

解决方案


您从服务器获得的数据是 JSON 格式,但它们不是 Array 。这是一个对象,

{"id": "1","amount": "1000","course_code": "BASIC","course": "Basic Course","content": "Sample","thumb": "sample.png"},{"id": "2","amount": "2000","course_code": "ADVANCED","course": "Advanced Course","content": "Sample","thumb": "sample.png"}

所以你必须在 json 对象内部循环,比如

for (var key in jsonResponse) {
    if (jsonResponse.hasOwnProperty(key)) {
        console.log(key + " -> " + jsonResponse[key]);
    }
}

编辑:如果您在一个对象中有多个对象,则必须在它们内部循环(外部用于),例如 for(var i in JsonObject)


推荐阅读