两次排序JSONArray

时间:2017-05-31 15:31:23

标签: java android json

我有一个像这样的JSONArray:

[{
    "Periode":203,
    "Annulé":0,
    "En_commande":0,
    "En_attente":100,
    "En_cours":0,
    "Perdu":0,
    "Terminé":0
},
{
    "Periode":204,
    "Annulé":0,
    "En_commande":0,
    "En_attente":500,
    "En_cours":0,
    "Perdu":500,
    "Terminé":0
},
{
    "Periode":205,
    "Annulé":0,
    "En_commande":1000,
    "En_attente":0,
    "En_cours":0,
    "Perdu":0,
    "Terminé":0
},
{
    "Periode":208,
    "Annulé":1000,
    "En_commande":0,
    "En_attente":0,
    "En_cours":0,
    "Perdu":0,
    "Terminé":0
},
{
    "En_attente":600,
    "En_commande":1000,
    "Perdu":2000,
    "Terminé":500,
    "En_cours":2000,
    "Annulé":1000
}]

此数组中的最后一个对象与其他对象的总数相对应(“Periode”字段除外)。 所以我想按照它们的值对最后一个对象进行排序,然后按照与它相同的顺序对所有其他JSONObject进行排序。

我不知道如何做到这一点,解决方案将是完美的,但我采取任何研究轨道或算法

我的例子需要结果:

[{
    "Periode":203,
    "Perdu":0,
    "En_cours":0,
    "En_commande":0,
    "Annulé":0,
    "En_attente":100,
    "Terminé":0
},
{
    "Periode":204,
    "Perdu":500,
    "En_cours":0,
    "En_commande":0,
    "Annulé":0,
    "En_attente":500,
    "Terminé":0
},
{
    "Periode":205,
    "Perdu":0,
    "En_cours":0,
    "En_commande":1000,
    "Annulé":0,
    "En_attente":0,
    "Terminé":0
},
{
    "Periode":208,
    "Perdu":0,
    "En_cours":0,
    "En_commande":0,
    "Annulé":1000,
    "En_attente":0,
    "Terminé":0
},
{
    "Perdu":2000,
    "En_cours":2000,
    "En_commande":1000,
    "Annulé":1000,
    "En_attente":600,
    "Terminé":500
}]

1 个答案:

答案 0 :(得分:0)

  • 导入gson: https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.0

  • 将您的json转换为类:(在此示例中为数据) http://www.jsonschema2pojo.org/

  • 将字符串json转换为数组,对其进行排序,然后将其转换回来:

    Data[] data = new Gson().fromJson(json, Data[].class);
    
    List<Data> datas = Arrays.asList(data);
    
    Collections.sort(datas, new Comparator<Data>() {
        @Override
        public int compare(Data o1, Data o2) {
    
            if(o1.getPeriode() != null && o2.getPeriode() != null)
                 return Integer.compare(o1.getPeriode(), o2.getPeriode());
    
            return Integer.compare(o1.getPerdu(), o2.getPerdu());
        }
    });
    
    data = datas.toArray(new Data[0]);
    String s = new Gson().toJson(data);
    System.out.println(s);