2

对于我的一项网络服务,我收到以下响应。

"COLUMNS": [
        "DIST_ID",
        "NAME",
        "HOME_PHONE",
        "PAID_RANK",
        "END_RANK",
        "VOL1",
        "VOL3"
    ]
"DATA": {
        "DIST_ID": [
            3,
            1002,
            1040,
            1290,
            1041,
            1421,
            7200,
            5980,
            3962,
            1070,
            9369,
        ]
    }

我该如何解析这个?

我试过了

JSONArray colArray = response.getJSONArray(COLUMNS);
            for(int i=0; i<colArray.length(); i++){
                if(Constants.LOG)Log.d("","Column "+colArray.getJSONObject(i).toString());
            }

但它没有奏效。它抛出异常

09-30 12:51:56.076: W/System.err(3003): org.json.JSONException: Value DIST_ID at 0 of type java.lang.String cannot be converted to JSONObject
09-30 12:51:56.076: W/System.err(3003):     at org.json.JSON.typeMismatch(JSON.java:96)
09-30 12:51:56.076: W/System.err(3003):     at org.json.JSONArray.getJSONObject(JSONArray.java:484)
09-30 12:51:56.076: W/System.err(3003):     at com.vl.infotrax.modules.reports.ReportsEngine.parseReportsDetailsData(ReportsEngine.java:156)
09-30 12:51:56.076: W/System.err(3003):     at com.vl.infotrax.modules.reports.ReportsEngine.retrieveReportsDetailsData(ReportsEngine.java:126)
09-30 12:51:56.076: W/System.err(3003):     at com.vl.infotrax.modules.reports.ReportsDetailsFragment$GetReportsDetailsData.doInBackground(ReportsDetailsFragment.java:66)
09-30 12:51:56.076: W/System.err(3003):     at com.vl.infotrax.modules.reports.ReportsDetailsFragment$GetReportsDetailsData.doInBackground(ReportsDetailsFragment.java:1)
09-30 12:51:56.084: W/System.err(3003):     at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-30 12:51:56.084: W/System.err(3003):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
09-30 12:51:56.084: W/System.err(3003):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
09-30 12:51:56.084: W/System.err(3003):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
09-30 12:51:56.084: W/System.err(3003):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
09-30 12:51:56.084: W/System.err(3003):     at java.lang.Thread.run(Thread.java:1096)

任何人都知道如何解决这个问题?提前致谢。

4

3 回答 3

6
JSONArray colArray = response.getJSONArray(COLUMNS);
    for(int i=0; i<colArray.length(); i++){
        Log.d("","Column "+colArray.getString(i));
    }
于 2013-09-30T07:27:52.100 回答
0

您必须直接获取值 asString而不是 as JSONObject

于 2013-09-30T07:26:39.343 回答
0

首先你需要得到使用 JSONTokener 解析的 JSON 字符串,请看下面给出的示例代码

String strJSON = ""; // your JSON string goes here
JSONObject jObject = (JSONObject) new JSONTokener(strJSON).nextValue();
JSONArray jAryColumns;
if(jObject.has("Columns")){
 jAryColumns = jObject.getJSONArray("Columns");// use the array as you please
}

使用上述片段中描述的技术并从 jObject 中检索“DATA” JSON 对象,从中您可以获得“DIST_ID”。

于 2013-09-30T07:33:24.843 回答