Android中按名称排序JSON数据问题求助
按名称排序JSON数据的可行方案
看起来你在给JSON数据按名称排序时遇到了棘手的问题,试了现有方案都不适用对吧?我结合你提供的代码片段,整理了一套适配你场景的修改方案,直接看代码和细节说明就行:
@Override protected Boolean doInBackground(String... args) { HttpHandler sh = new HttpHandler(); String url = "androidnews.json"; String jsonStr = sh.makeServiceCall(url); if (jsonStr != null) { try { // 移除了你原有的 JSONObject 初始化代码 // 新增:直接解析JSON数组(假设你的接口返回的是数组格式,如[{"name":"XXX"},...]) JSONArray jsonArray = new JSONArray(jsonStr); // 新增:把JSON数组转成List,方便后续排序操作 List<JSONObject> itemList = new ArrayList<>(); for (int i = 0; i < jsonArray.length(); i++) { itemList.add(jsonArray.getJSONObject(i)); } // 新增:核心排序逻辑——按名称字段排序 Collections.sort(itemList, new Comparator<JSONObject>() { @Override public int compare(JSONObject obj1, JSONObject obj2) { try { // 这里替换成你JSON数据中实际的名称字段键,比如"title"或"articleName" String name1 = obj1.getString("name"); String name2 = obj2.getString("name"); // 忽略大小写升序排序,要降序的话反过来写name2.compareToIgnoreCase(name1) return name1.compareToIgnoreCase(name2); } catch (JSONException e) { e.printStackTrace(); return 0; } } }); // 新增:排序完成后,这里可以处理数据(比如更新UI、存储等) // 示例:打印排序后的结果 for (JSONObject item : itemList) { Log.d("SortedResult", "名称:" + item.getString("name")); } return true; } catch (final JSONException e) { Log.e(TAG, "Json解析错误: " + e.getMessage()); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "Json解析错误: " + e.getMessage(), Toast.LENGTH_LONG).show(); } }); } } else { Log.e(TAG, "无法从服务器获取JSON数据"); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(getApplicationContext(), "无法从服务器获取JSON数据,请查看LogCat排查问题!", Toast.LENGTH_LONG).show(); } }); } return false; }
几个关键注意点:
- 适配JSON结构:如果你的接口返回的是嵌套结构(比如外层是JSONObject,里面包含一个数组字段),那要先获取内层数组,比如:
JSONObject jsonObj = new JSONObject(jsonStr); JSONArray jsonArray = jsonObj.getJSONArray("news"); - 字段名匹配:一定要把
getString("name")里的"name"换成你JSON数据中实际的名称字段键,别写错了! - 排序规则自定义:用
compareToIgnoreCase是忽略大小写排序,要区分大小写就换成compareTo;要降序就把两个字段的位置调换。
内容的提问来源于stack exchange,提问作者Darksymphony
相关产品推荐
相关产品推荐

