2013-07-17 27 views
1

如何使用標籤名稱對JSONArray進行排序,並在android上進行升序和降序排序。如何在Android中對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": [...] 
    } 
] 

} 

我需要的「結果」 JSON Array由「USER_ID」標籤名稱排序,同時解析,怎麼樣在Android中做到這一點?

+0

你是否在sqlite的某處保存了這個響應,或者只是在視圖中顯示整個內容? – hardartcore

+1

爲什麼你需要在解析過程中進行排序?您可以在解析後訂購。使用collections.sort例如 – Blackbelt

+0

我已經將每個對象保存在每個單獨的數組列表中。如果我排序user_id arraylist其他值無序。那是我面臨的問題。 –

回答

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,然後做對他們的排序。

+0

您的代碼正在工作。但比較要按降序排列。我應該怎樣改變升序? –

+2

@murali_ma更改lid.compareTo(擺脫)rid.compareTo(蓋) – faylon

+0

@faylon很好的答案 –

1

在我看來,像這樣做的最簡單的方法,而不是「排序JSON陣列」正如你提到的,是剛剛解析整個事情到包含像信息,所以數據結構:

class Results { 
    String user_id; 
    Strung comment_id; 
} 

將其另存爲ArrayList或[插入喜好列表結構]。

一旦你解析整個JSON數組,然後你可以根據使用Collections.sort USER_ID欄排序ArrayList中,給你他們爲了

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; 
    } 
} 
相關問題