2016-07-21 13 views
1

Ich erhalte diese Zeichenfolge (von webservice) in eine JSONArray,Java- Verarbeitung Json-Array auf Schlüsseln basierend

[{ 
    "textinput": [{ 
     "position": 0, 
     "dependency": "no", 
     "id": 0, 
     "Itype": "textinput" 
    }, { 
     "position": 2, 
     "dependency": "no", 
     "id": 1, 
     "Itype": "textinput" 
    }] 
}, { 
    "textarea": [{ 
     "position": 1, 
     "type": "textarea", 
     "dependency": "no", 
     "id": 0 
    }] 
}] 

Ich brauche das Array zu sortieren, indem Reihenfolge basierend auf Tasten- „Position“ ich aufsteigend der folgende Code bin mit org.json Bibliothek, ist der, so weit der Code i

verwendet
JSONArray sortedJsonArray = new JSONArray(); 
List<JSONObject> jsonList = new ArrayList<JSONObject>(); 
for (int i = 0; i < jsonArray.length(); i++) { 
    jsonList.add(jsonArray.getJSONObject(i)); 
} 

Collections.sort(jsonList, new Comparator<JSONObject>() { 

    public int compare(JSONObject a, JSONObject b) { 
     String valA = new String(); 
     String valB = new String(); 

     try { 
      valA = (String) a.get("position"); 
      valB = (String) b.get("position"); 
     } 
     catch (JSONException e) { 
      //do something 
     } 

     return valA.compareTo(valB); 
    } 
}); 

for (int i = 0; i < jsonArray.length(); i++) { 
    sortedJsonArray.put(jsonList.get(i)); 
} 

AALso andere Links auf der Website versucht. bitte helfen

+0

Verwendung von PHP ein Array zu sortieren, die sehr einfach – vinoth12594

+0

ist, was der Fehler ist, dass Sie bekommen? Möchten Sie diesen Code optimieren? –

+0

@ vinoth12594 danke. aber ich kann nicht, weil das sortierte Array an eine Android-Anwendung weitergegeben werden muss –

Antwort

1

Versuchen Sie TreeMap, wird es automatisch das Array für Sie sortieren. Alles, was Sie tun müssen, ist, den Schlüssel von TreeMap und JSONObject den Wert "position" zu setzen. Die Treemap wird die Werte in aufsteigender Reihenfolge der Schlüssel anordnen. Und dann können Sie die JSONObject-Werte aus der Treemap abrufen.

private TreeMap<Integer,JSONObject> sortedarray = new TreeMap<Integer,JONObject>(); 


    for (int i = 0; i < jsonArray.length(); i++) { 
     try { 
      sortedarray.put(Integer.parseInt(jsonArray.getJSONObject(i).get("position")+""),jsonArray.getJSONObject(i)); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

Nun, wenn Sie es wollen nur ein jsonArray sein ..

JSONArray sortedJsonArray = new JSONArray(); 
    for(int x = 0; x<sortedarray.size();x++) 
     { 

      //assuming that positions you get in JSON are always complete like 1,2,3,4,....,10,...,100. 
       sortedJsonArray.put(sortedarray.get(x)); 

      //assuming that positions you get in JSON are not always complete like 1,3,4,..,10,13,...,100.(misses a few numbers in between like 2 and 11 in this case) 
      sortedJsonArray.put(sortedarray.get(Integer.parseInt(advanceplay.get(advanceplay.keySet().toArray()[i])))); 

     } 
Verwandte Themen