Android 正在分析没有主索引键的对象数组
我的JSON数组类似于: [{“id”:“1”,“name”:“ABC”},{“id”:“2”,“name”:“XYZ”}] 我希望它能被解析 我这样做: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
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) {
}
}