Android 正在分析没有主索引键的对象数组

Android 正在分析没有主索引键的对象数组,android,json,Android,Json,我的JSON数组类似于: [{“id”:“1”,“name”:“ABC”},{“id”:“2”,“name”:“XYZ”}] 我希望它能被解析 我这样做: protected JSONObject doInBackground(String... args) { json = jParser.getJSONFromUrl(url); //Log.e("JSON Data", json.toString()); return json; } protected void

我的JSON数组类似于: [{“id”:“1”,“name”:“ABC”},{“id”:“2”,“name”:“XYZ”}]

我希望它能被解析

我这样做:

protected JSONObject doInBackground(String... args)
{
    json = jParser.getJSONFromUrl(url);
    //Log.e("JSON Data", json.toString());
    return json;
}

protected void onPostExecute(JSONObject json)
{
    pDialog.dismiss();
    // Getting JSON Array from URL
    mydataset = json.getJSONArray("data");
    Log.d("Till Here", mydataset.toString());
}
但是“直到这里”并没有出现在日志中,这意味着我在做别的事情。
有人能帮忙吗?

我建议您使用
optJSONArray()
我喜欢的方法

mydataset = json.optJSONArray("data");
因为它不需要被try/catch包围,但是您应该小心null。
我们也看不到什么是
jsonobjectjson
——是
JSONObject
还是
JSONArray
?如果是第二个,那么您的代码是错误的,因为您需要操作
JSONArray
,而不是
JSONObject

protected JSONArray doInBackground(String... args)
{
    json = jParser.getJSONFromUrl(url);
    Log.d("JSON Data", json.toString());
    return json;
}

protected void onPostExecute(JSONArray json)
{
    pDialog.dismiss();
    // Got JSON Array from URL already
    Log.d("b4 tHere", String.valueOf(json));
    mydataset = json;
    Log.d("Till Here", String.valueOf(mydataset));
}
publicstaticjsonarray getJSONfromURL(字符串url){
InputStream=null;
字符串结果=”;
JSONArray-jArray=null;
HttpClient HttpClient=新的DefaultHttpClient();
HttpGet HttpGet=新的HttpGet(url);
HttpResponse response=httpclient.execute(httpget);
HttpEntity=response.getEntity();
is=entity.getContent();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8;
StringBuilder sb=新的StringBuilder();
字符串行=null;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
is.close();
结果=sb.toString();
jArray=新的JSONArray(结果);
返回jArray;
}
}    
受保护的JSONArray doInBackground(字符串…args)
{
json=jParser.getJSONFromUrl(url);
//Log.e(“JSON数据”,JSON.toString());
返回json;
}
受保护的void onPostExecute(JSONArray json)
{
pDialog.disclose();
试一试{
for(int i=0;i>>id=“+id+”>>name=“+name”);
}
}捕获(JSONException e){
}
}

请注意,这是我的代码中的一个示例,以避免不必要的混淆并切中要害。为什么要使用“try”?您正在添加一个try-catch块。你在catch Block中得到什么了吗?你得到的“json”正确吗?Log.e(“JSON数据,JSON.toString());是否返回某些内容?是的,JSON包含数据,我已对其进行调试。此行给出错误JSONArray properties=new JSONArray(JSON);我的结果是json变量。它说message无法解析Constructor将jParser.getJSONFromUrl返回类型更改为JSONArray。它给出了错误无法解析的方法。我认为json解析器中存在一些问题。如果是,请您参考任何好的json解析器。谢谢。编辑了答案。是一个好的json解析器吗
    public static JSONArray getJSONfromURL(String url){
        InputStream is = null;
        String result = "";
        JSONArray jArray = null;

                HttpClient httpclient = new DefaultHttpClient();
                HttpGet httpget = new HttpGet(url);
                HttpResponse response = httpclient.execute(httpget);
                HttpEntity entity = response.getEntity();
                is = entity.getContent();

                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                StringBuilder sb = new StringBuilder();
                String line = null;
                while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                }
                is.close();
                result=sb.toString();

            jArray = new JSONArray(result);            
        return jArray;
    }

}    

 protected JSONArray doInBackground(String... args)
    {
        json = jParser.getJSONFromUrl(url);
        //Log.e("JSON Data", json.toString());
        return json;
    }

    protected void onPostExecute(JSONArray json)
    {
        pDialog.dismiss();
        try {

                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject jsobj = jsonArray.getJSONObject(i);

                        String id = jsobj.getString("id");

                        String name = jsobj.getString("name");
                        Log.e("MainActivity"," >>> id = " + id + " >> name = "  +name);

                    }
                } catch (JSONException e) {
                }
    }