5

我在 json 工作时遇到异常。我的 JSONPresr 类如下

 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.UnsupportedEncodingException;

 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.impl.client.DefaultHttpClient;
 import org.json.JSONException;
 import org.json.JSONObject;

 import android.os.AsyncTask;
 import android.util.Log;

public class JSONParser {
 static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();          

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
            System.out.println(" value in json sting"+json);
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
            Log.e("JSON Parser", "Error parsing data [" + e.getMessage()+"] "+json);
            System.out.println(" error is here");

        }

        // return JSON String
        return jObj;

    }

    }

我通过这些代码获取我的数据

          String TAG_user_detail = "user_details";
              String TAG_user_id = "user_id";
             String TAG_user_name = "user_name";
             String TAG_user_phone = "user_phone";
             String TAG_ref_id = "ref_id";
             JSONArray user_detail_jsonarray = null;
             JSONParser jParser = new JSONParser();

             // getting JSON string from URL
             JSONObject json = jParser.getJSONFromUrl(url);
             try {
                 // Getting Array of Contacts
                 user_detail_jsonarray = json.getJSONArray(TAG_user_detail);

                 // looping through All Contacts
                 for(int i = 0; i < user_detail_jsonarray.length(); i++){
                     JSONObject c = user_detail_jsonarray.getJSONObject(i);

                     // Storing each json item in variable
                     int id = c.getInt(TAG_user_id);
                     System.out.println("user id from json"+id);

                     String name_fromjson = c.getString(TAG_user_name);
                     System.out.println("user name from json"+name_fromjson);

                     int phone_no_fromjson = c.getInt(TAG_user_phone);
                     System.out.println("user phone from json"+phone_no_fromjson);

                     int ref_id_fromjson = c.getInt(TAG_ref_id);
                     System.out.println("user ref id from json"+ref_id_fromjson);





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

但是我在这一行中得到了异常

    user_detail_jsonarray = json.getJSONArray(TAG_user_detail);

我的 Stake Trace 消息如下

       {"ref_id":1295,"user_name":"chand","user_phone":"9620085675","user_id":"1"} at user_details of type org.json.JSONObject cannot be converted to JSONArray

我尝试了很多链接,但不幸的是我无法得到我的结果。请任何人帮我解决这个问题。在此先感谢大家

4

3 回答 3

24

从错误中可以清楚地看出您正在尝试将 Json Object 转换为 Json 数组。那不应该。

这是读取 JSON 响应的代码。

String json = "Assuming that here is your JSON response"; 
try {
    JSONObject parentObject = new JSONObject(json);
    JSONObject userDetails = parentObject.getJSONObject("user_details"); 

    //And then read attributes like             
    String name = userDetails.getString("user_name"); 
    String phone = userDetails.getString("user_phone");
    String id = userDetails.getString("re‌​f_id");

} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} 

以上代码适用于{"user_details":{"user_id":"1","user_name":"chand","user_phone":"9620085675","re‌​f_id":6386}}JSON。

于 2013-07-25T07:27:04.033 回答
7

从异常中学习

org.json.JSONObject cannot be converted to JSONArray

您收到此异常 org.json.JSONObject cannot be converted to JSONArray 是因为您尝试转换JSONObject to JSONArray这是不可能的。

{表示json对象节点

[表示json数组节点

于 2013-07-25T06:56:28.463 回答
3

你的 jsondata 是 json 对象格式。更改此行

JsonObject user_detail_jsonobj = json.getJSONObject(TAG_user_detail);
于 2013-07-25T06:53:57.677 回答