我刚接触JSON,请尝试以下教程:http : //p-xr.com/android-tutorial-how-to-parse-read-json-data-into-a-android-listview/#comments
我是JSON,C语言,Java和Android的新手,但我正在学习。本教程使用了我所说的命名数组,但是我将在我的android项目中使用的所有JSON将使用没有命名数组的简单表行。我正在使用的JSON示例和教程中的地震json示例如下。
本教程遍历地震数组,并使用以下代码将其转换为JAVA哈希图列表:
JSONArray earthquakes = json.getJSONArray("earthquakes"); for(int i=0;i<earthquakes.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = earthquakes.getJSONObject(i);
map.put("id", String.valueOf(i));
map.put("name", "Earthquake name:" + e.getString("eqid"));
map.put("magnitude", "Magnitude: " + e.getString("magnitude"));
mylist.add(map);
} 我的问题是,json.getJSONArray("")如果我的JSON如下所示,该如何使用?我可以转换其余代码,getJSONArray("strJsonArrayName")如果我没有,我只需要知道如何使用来加载JSON strJsonArrayName。
我的JSON(未命名数组)
[ { "cnt":1, "name":"American", "pk":7 }, { "cnt":2, "name":"Celebrities", "pk":3 }, { "cnt":1, "name":"Female", "pk":2 }, { "cnt":1, "name":"Language", "pk":8 }, { "cnt":1, "name":"Male", "pk":1 }, { "cnt":1, "name":"Region", "pk":9 } ] 教程的JSON(命名数组)
{ "earthquakes":[ { "eqid":"c0001xgp", "magnitude":8.8, "lng":142.369, "src":"us", "datetime":"2011-03-11 04:46:23", "depth":24.4, "lat":38.322 }, { "eqid":"c000905e", "magnitude":8.6, "lng":93.0632, "src":"us", "datetime":"2012-04-11 06:38:37", "depth":22.9, "lat":2.311 }, { "eqid":"2007hear", "magnitude":8.4, "lng":101.3815, "src":"us", "datetime":"2007-09-12 09:10:26", "depth":30, "lat":-4.5172 }, { "eqid":"c00090da", "magnitude":8.2, "lng":92.4522, "src":"us", "datetime":"2012-04-11 08:43:09", "depth":16.4, "lat":0.7731 }, { "eqid":"2007aqbk", "magnitude":8, "lng":156.9567, "src":"us", "datetime":"2007-04-01 18:39:56", "depth":10, "lat":-8.4528 }, { "eqid":"2007hec6", "magnitude":7.8, "lng":100.9638, "src":"us", "datetime":"2007-09-12 21:49:01", "depth":10, "lat":-2.5265 }, { "eqid":"a00043nx", "magnitude":7.7, "lng":100.1139, "src":"us", "datetime":"2010-10-25 12:42:22", "depth":20.6, "lat":-3.4841 }, { "eqid":"2010utc5", "magnitude":7.7, "lng":97.1315, "src":"us", "datetime":"2010-04-06 20:15:02", "depth":31, "lat":2.3602 }, { "eqid":"2009mebz", "magnitude":7.6, "lng":99.9606, "src":"us", "datetime":"2009-09-30 08:16:09", "depth":80, "lat":-0.7889 }, { "eqid":"2009kdb2", "magnitude":7.6, "lng":92.9226, "src":"us", "datetime":"2009-08-10 17:55:39", "depth":33.1, "lat":14.0129 } ] } 在本教程中,基于@MДΓΓБДLL和@Cody Caughlan的答案,我能够将JSONFunctions.getJSONFromURL格式化为JSONArray而不是JSONObject。这是我修改后的工作代码,谢谢!
public class JSONfunctions { 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;
} } 问题来源于stack overflow
您根本不需要调用json.getJSONArray(),因为您正在使用的JSON 是一个数组。因此,请勿构造JSONObject; 的实例。使用一个JSONArray。这样就足够了:
// ... JSONArray json = new JSONArray(result); // ...
for(int i=0;i<json.length();i++){
HashMap<String, String> map = new HashMap<String, String>();
JSONObject e = json.getJSONObject(i);
map.put("id", String.valueOf(i));
map.put("name", "Earthquake name:" + e.getString("eqid"));
map.put("magnitude", "Magnitude: " + e.getString("magnitude"));
mylist.add(map);
} 您不能使用与本教程中完全相同的方法,因为您要处理的JSON需要JSONArray从根解析为,而不是JSONObject。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。