1

JSONArray をそのタグ名で昇順および降順で並べ替える方法。

私のアプリケーションでは、次のような 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でそれを行う方法は?

4

3 に答える 3

16
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 に解析してからソートを行うことをお勧めします。

于 2013-07-17T11:10:32.170 に答える
1

あなたが提案するように「JSON配列をソートする」のではなく、それを行う最も簡単な方法のように私には思えます。

class Results {
     String user_id;
     Strung comment_id;
}

これを ArrayList または [お気に入りのリスト構造を挿入] として保存します。

JSON 配列全体を解析したら、 を使用して user_id フィールドに基づいて ArrayList をソートし、Collections.sortそれらを順番に並べることができます

于 2013-07-17T10:44:38.540 に答える