如何根据密钥对GSON阵列进行排序?

Amo*_*rni 5 java sorting 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}
]
Run Code Online (Sandbox Code Playgroud)

创建了一个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();
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试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}
]
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*ikO 9

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

public class MyClass {
    private Integer id;
    private String name;
    private Boolean valid;
    //getters & setters
}
Run Code Online (Sandbox Code Playgroud)

然后:

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

现在你有一个List,你想按属性的值对它进行排序id,所以你可以Collections按照这里的解释使用:

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

最后:

Collections.sort(myList, new MyComparator());
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用一个数组和Java 8 lambdas:`MyClass [] objects = new Gson().fromJson(strArrayText,MyClass [] .class); Arrays.sort(objects,(MyClass m1,MyClass m2) - > m1.getId().compareTo(m2.getId()));` (2认同)