java - 如何根据键对 GSON 数组进行排序?

标签 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}
]

从中创建了一个 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<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());

关于java - 如何根据键对 GSON 数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18575757/

相关文章:

algorithm - 如何按顺时针/逆时针方向对所有多边形点进行排序?

java - jackson json 中的 TypeToken.getParameterized

java - Spring Boot找不到EmbeddedKafkaBroker Bean

java - 如何在没有 IDE 的情况下设置加载时间编织配置?

java - 如何使用 java 的 webdriver 检查特定标签是否存在

mongodb 聚合查询排序结果并显示日期名称

java - 关于 Eclipse 上的 sun/misc/BASE64Encoder 的错误

python - 按一列的值排序,使行按另一列的值分组

java - 如何将 Json 数组转换为 Java 对象数组

java - Gson,自动初始化并避免空异常