2013-09-02 5 views
1

Рассмотрим следующий мой массивКак отсортировать массив GSON на основе ключа?

[ 
    {"id":10,"name":"name10","valid":true}, 
    {"id":12,"name":"name12","valid":false}, 
    {"id":11,"name":"name11","valid":false}, 
    {"id":9,"name":"name9","valid":true} 
] 

Создано JsonArray из него, как следующий код делает:

//Create a JSON Parser using GSON library 
objJsonParser = new JsonParser(); 
String strArrayText = [{"id":9,"name":"name9","valid":true}, ...] 
JsonArray jsonArrayOfJsonObjects = objJsonParser.parse(strArrayText).getAsJsonArray(); 

Теперь я пытаюсь разобраться jsonArrayOfJsonObjects на основе name поле.

Желаемая Выход:

[ 
    {"id":9,"name":"name9","valid":true}, 
    {"id":10,"name":"name10","valid":false}, 
    {"id":11,"name":"name11","valid":false}, 
    {"id":12,"name":"name12","valid":true} 
] 

Может кто поможет разобраться в этом с самым лучшим apporach относительно Java & Gson?
Ваши данные с благодарностью.

+0

возможно дубликат [Android, как сортировать JSONArray из JSONObjects] (http://stackoverflow.com/questions/ 12901742/android-how-to-sort-jsonarray-of-jsonobjects) – chrylis

+0

http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List) –

+0

@MattBall 'JsonArray' - это, в частности, не' Collection', чтобы избежать необходимости делать много переводов объектов без необходимости. – chrylis

ответ

7

Прежде всего, правильный способ разобрать ваш JSON, чтобы создать класс, чтобы инкапсулировать данные, такие как:

public class MyClass { 
    private Integer id; 
    private String name; 
    private Boolean valid; 
    //getters & setters 
} 

И потом:

Type listType = new TypeToken<List<MyClass>>() {}.getType(); 
List<MyClass> myList = new Gson().fromJson(strArrayText, listType); 

Теперь у вас есть List, и вы хотите отсортировать его по значению атрибута id, так что вы можете использовать Collections как объяснено here:

public class MyComparator implements Comparator<MyClass> { 
    @Override 
    public int compare(MyClass o1, MyClass o2) { 
     return o1.getId().compareTo(o2.getId()); 
    } 
} 

И наконец:

Collections.sort(myList, new MyComparator()); 
+0

Вы также можете использовать массив и Java 8 lambdas: MyClass [] objects = new Gson(). FromJson (strArrayText, MyClass []. Class); Arrays.sort (объекты, (MyClass m1, MyClass m2) -> m1.getId(). CompareTo (m2.getId())); – joshden

0

Вы можете использовать библиотеку Gson https://sites.google.com/site/gson/gson-user-guide , чтобы получить массив (класс должен реализовывать сопоставимые) и сортировать с помощью массива array();

Благодаря

+0

Можете ли вы привести пример? –

+1

У вас есть пример в ответе, если мне нужно его закодировать, код будет таким же. – Felquir