如何根据密钥对GSONarrays进行排序?

考虑以下是我的数组

[ {"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创建了一个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(); 

现在,我正在尝试根据name字段对jsonArrayOfJsonObjects进行排序。

期望的输出:

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

任何人都可以帮助解决这个与Java&Gson相关的最佳应用程序吗?
非常感谢您的投入。

首先,解析JSON的正确方法是创建一个类来封装数据,例如:

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

接着:

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

现在您有了一个List并且您希望按属性id的值对其进行排序,因此您可以按照此处的说明使用Collections

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

最后:

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

您可以使用Gson库https://sites.google.com/site/gson/gson-user-guide获取数组(该类应实现可比较)并使用arrays.sort()进行排序;

谢谢

尝试使用此库方法作为模型类创建的简单JSON级替代方法

 /** * Sort JSON-array by a given key name (numbers or text expected). * * @param jsonArray JSON-array to sort. * @param keyNameToSort Key name to sort by. Expected are integer type * (sorted ascending) or string type (sorted * alphabetically). */ public static JsonArray sortJsonArrayByKey( JsonArray jsonArray, String keyNameToSort) { JsonArray sortedJsonArray = new JsonArray(); JsonObject jsonObject = null; int jsonElementIndex; TreeMap integerSortedObjects = new TreeMap<>(); TreeMap stringSortedObjects = new TreeMap<>(); for ( jsonElementIndex = 0; jsonElementIndex < jsonArray.size(); jsonElementIndex++) { try { // A JSON-Object from JSON-array: jsonObject = jsonArray .get( jsonElementIndex) .getAsJsonObject(); } catch (Exception notAnObject) { } for (Entry entry : jsonObject.entrySet()) { // Look for the given key in the JSON-object: if ( entry.getKey() .equals(keyNameToSort)) { try { // If key is of integer type: integerSortedObjects.put( entry .getValue() .getAsInt(), jsonObject); } catch (Exception notAnInt) { try { // If key is of string type: stringSortedObjects.put( entry .getValue() .getAsString(), jsonObject); } catch (Exception neitherIntNorString) { } } } } } // Add sorted by number values first: for (Integer key : integerSortedObjects.keySet()) { sortedJsonArray.add( integerSortedObjects.get( key)); } // Add sorted by string values second: for (String key : stringSortedObjects.keySet()) { sortedJsonArray.add( stringSortedObjects.get( key)); } return sortedJsonArray; }