2016-03-14 100 views
0

我可以排序的JSONObject的JSONArray但我還是堅持,當我需要一個像如下排序數組:如何對包含另一個JSONObject的JSONObject的JSONArray進行排序?

[{ 
    "key1": "value1", 
    "key2": "value2", 
    "key3": { 
     "key4": "value4", 
     "key5": "value5" 
    } 
}, { 
    "key1": "value1", 
    "key2": "value2", 
    "key3": { 
     "key4": "value4", 
     "key5": "value5" 
    } 
}] 

我要作爲排序依據「鍵4」這個數組。

這裏是我的代碼,而對key1的

public static JSONArray sortJsonArray(JSONArray array, final String key) throws JSONException 
{ 
     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 = null; 
       String rid = null; 
       try { 
        lid = lhs.getString(key); 
        rid = rhs.getString(key); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       // Here you could parse string id to integer and then compare. 
       return lid.compareTo(rid); 
      } 
     }); 
     return new JSONArray(jsons); 
    } 
+0

據我所知,JSONArray是不是一個排序的數據結構,你需要把將JSONObjects放入一個'List '然後排序 –

+0

對,我說了,但我只能對Key1或key2進行排序;我如何在key4上對它進行排序? –

+0

@ cricket_007:我添加了我的代碼。 –

回答

1

排序只是比較lhs.getJSONObject("key3").getString("key4")rhs.getJSONObject("key3").getString("key4")

+0

Thnx,讓我試試這個工作 –

+0

It's Working Man,Thnx, 您保存了我的培根... –

0

只是貼上我的代碼在這裏(按@ cricket_007幫助),這可以幫助一些人:

public static JSONArray sortJsonArrayOpenDate(JSONArray array) throws JSONException { 
     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 = null; 
       String rid = null; 
       try { 
        lid = lhs.getJSONObject("key3").getString("key4"); 
        rid = rhs.getJSONObject("key3").getString("key4"); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
       return lid.compareTo(rid); 
      } 
     }); 
     return new JSONArray(jsons); 
    } 
相關問題