开发者社区> 问答> 正文

获取没有数组名称的JSONArray吗?

我刚接触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

展开
收起
保持可爱mmm 2020-02-09 12:05:12 496 0
1 条回答
写回答
取消 提交回答
  • 您根本不需要调用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。

    2020-02-09 12:05:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载