如何通过其标记名称对JSONArray进行排序,并在android上进行升序和降序。
在我的应用程序中,我有一个类似下面的JSON,需要根据用户选项显示数据(按升序或降序按user_id标签排序)。我已经解析了JSON如下:
JSONObject mObject = new JSONObject(JSONResponse);
String commentsVal = mObject.getString("message");
String resultVal = mObject.getString("result");
JSONArray resultArray = new JSONArray(resultVal);
int resultSize = resultArray.length();
for (int i = 0; i < resultArray.length(); i++) {
JSONObject resultObj = resultArray.getJSONObject(i);
resultObj.getString("comment_id");
.....
}
..............
这是我的JSON回复:
{
"success": 1,
"message": "some message",
"result": [
{
"comment_id": "43906",
"comp_id": "116725",
"user_id": "48322",
"agree": "0",
.....
"replies": [....]
},
{
"comment_id": "43905",
"comp_id": "116725",
"user_id": "48248",
"agree": "0",
.......
"replies": [...]
}
]
}
我需要在解析时按“user_id”标记名称排序的“结果”JSON数组,如何在Android中执行此操作?
答案 0 :(得分:14)
public static JSONArray sortJsonArray(JSONArray array) {
List<JSONObject> jsons = new ArrayList<JSONObject>();
for (int i = 0; i < array.length(); i++) {
jsons.add(array.getJSONObject(i));
}
Collections.sort(jsons, new Comparator<JSONObject>() {
@Override
public int compare(JSONObject lhs, JSONObject rhs) {
String lid = lhs.getString("comment_id");
String rid = rhs.getString("comment_id");
// Here you could parse string id to integer and then compare.
return lid.compareTo(rid);
}
});
return new JSONArray(jsons);
}
这段代码可以返回一个已排序的JSONArray,但我仍然建议您将JSONObject解析为您自己的数据bean,然后对它们进行排序。
答案 1 :(得分:1)
在我看来,最简单的方法,而不是按照你的建议“排序JSON数组”,只是将整个事情解析为包含如下信息的数据结构:
class Results {
String user_id;
Strung comment_id;
}
将其另存为ArrayList或[插入收藏列表结构]。
一旦解析了整个JSON数组,就可以使用Collections.sort
根据user_id字段对ArrayList进行排序,按顺序为它们提供
答案 2 :(得分:0)
以下代码可能对您有用。
ArrayList<ResultBean> user_array;
Collections.sort(user_array, new Comparator<ResultBean>() {
@Override
public int compare(ResultBean data1, ResultBean data2) {
if (data1.getUserId() >= data2.getUserId()) {
return -1;
} else {
return 1;
}
}
});
您的ResultBean
将如下所示。
public class ResultBean {
//other methods and declarations...
public int getUserId() {
return userId;
}
}