Java中对jsonArray的排序,使用的是Gson
使用Gson对json解析字符串,转化为json对象.
先上代码: 下面是main方法里面的代码
package testJava; import java.util.ArrayList; import java.util.Collections; import java.util.List; import com.google.gson.JsonParser; import com.google.gson.JsonArray; import com.google.gson.JsonObject; public class TestJava { public static void main(String[] args) { // TODO Auto-generated method stub jsoaArraySort(); } public static void jsoaArraySort() { String arrayData = "[" + "{\"Name\":\"TVS\",\"No\":" + 202 + ",\"Length\":" + 23 + "}," + "{\"Name\":\"TVC\",\"No\":" + 203 + ",\"Length\":" + 14 + "}," + "{\"Name\":\"Wel\",\"No\":" + 345 + ",\"Length\":" + 35 + "}," + "{\"Name\":\"Sma\",\"No\":" + 678 + ",\"Length\":" + 45 + "}," + "{\"Name\":\"Sma\",\"No\":" + 136 + ",\"Length\":" + 15 + "}," + "{\"Name\":\"Cus\",\"No\":" + 257 + ",\"Length\":" + 17 + "}," + "{\"Name\":\"And\",\"No\":" + 678 + ",\"Length\":" + 16 + "}," + "{\"Name\":\"Roo\",\"No\":" + 136 + ",\"Length\":" + 56 + "}" +"]"; JsonParser parser = new JsonParser(); JsonArray jsonArray = parser.parse(arrayData).getAsJsonArray(); System.out.println("init jsonArray=" + jsonArray.toString()); JsonArray sort_JsonArray = new JsonArray(); List<JsonObject> list = new ArrayList<JsonObject>(); JsonObject jsonObj = null; for (int i = 0; i < jsonArray.size(); i++) { jsonObj = (JsonObject) jsonArray.get(i); list.add(jsonObj); } //这里最核心的地方就是SortComparator这个类 //其中构造方法的参数: //sortItem是要排序的jsonArray中一个元素, 这里我选择是Name, 也可以选择No或者是Length //sortType是排序的类型, 有三种情况 // 1. 排序的元素对应的值是int, 那么sortType = "int"; // 2. 排序的元素对应的值是string, 那么sortType = "string"; // 3. 排序的元素对应的是是其他类型, 默认是不排序, (后面可以扩展) //sortDire是排序的方向, 可以是asc或者desc, 默认是数据的原始方向(就是没有排序方向) String sortItem = "Length"; String sortType = "int"; String sortDire = "desc"; Collections.sort(list, new SortComparator(sortItem, sortType, sortDire)); for (int i = 0; i < list.size(); i++) { jsonObj = list.get(i); sort_JsonArray.add(jsonObj); } System.out.println("after sort_JsonArray=" + sort_JsonArray.toString()); } }
下面给出SortComparator.java
package testJava; import java.util.Comparator; import com.google.gson.JsonObject; public class SortComparator implements Comparator<JsonObject> { private String sortItem; private String sortType; private String sortDire; public SortComparator(String sortItem, String sortType, String sortDire) { this.sortItem = sortItem; this.sortType = sortType; this.sortDire = sortDire; } @Override public int compare(JsonObject o1, JsonObject o2) { String value1 = o1.getAsJsonObject().get(sortItem).getAsString(); String value2 = o2.getAsJsonObject().get(sortItem).getAsString(); if ("int".equalsIgnoreCase(this.sortType)) { // int sort int int1 = Integer.parseInt(value1); int int2 = Integer.parseInt(value2); if ("asc".equalsIgnoreCase(this.sortDire)) { return int1 - int2; } else if ("desc".equalsIgnoreCase(this.sortDire)) { return int2 - int1; } else { return 0; } } else if ("string".equalsIgnoreCase(this.sortType)) { // string sort if ("asc".equalsIgnoreCase(this.sortDire)) { return value1.compareTo(value2); } else if ("desc".equalsIgnoreCase(this.sortDire)) { return value2.compareTo(value1); } else { return 0; } } else { // nothing sort return 0; } } }
测试的结果:
jsonArray的初始值如下: jsonArray = [ {"Name":"TVS","No":202,"Length":23}, {"Name":"TVC","No":203,"Length":14}, {"Name":"Wel","No":345,"Length":35}, {"Name":"Sma","No":678,"Length":45}, {"Name":"Sma","No":136,"Length":15}, {"Name":"Cus","No":257,"Length":17}, {"Name":"And","No":678,"Length":16}, {"Name":"Roo","No":136,"Length":56} ];
下面是按照Name元素从小到达排序: SortComparator("Name", "string", "asc") after sort_JsonArray=[ {"Name":"And","No":678,"Length":16}, {"Name":"Cus","No":257,"Length":17}, {"Name":"Roo","No":136,"Length":56}, {"Name":"Sma","No":678,"Length":45}, {"Name":"Sma","No":136,"Length":15}, {"Name":"TVC","No":203,"Length":14}, {"Name":"TVS","No":202,"Length":23}, {"Name":"Wel","No":345,"Length":35} ]
下面是按照Name元素从大到小排序: SortComparator("Name", "string", "desc") after sort_JsonArray=[ {"Name":"Wel","No":345,"Length":35}, {"Name":"TVS","No":202,"Length":23}, {"Name":"TVC","No":203,"Length":14}, {"Name":"Sma","No":678,"Length":45}, {"Name":"Sma","No":136,"Length":15}, {"Name":"Roo","No":136,"Length":56}, {"Name":"Cus","No":257,"Length":17}, {"Name":"And","No":678,"Length":16} ]
下面是按照Length元素从小到大排序: SortComparator("Length", "int", "asc") after sort_JsonArray=[ {"Name":"TVC","No":203,"Length":14}, {"Name":"Sma","No":136,"Length":15}, {"Name":"And","No":678,"Length":16}, {"Name":"Cus","No":257,"Length":17}, {"Name":"TVS","No":202,"Length":23}, {"Name":"Wel","No":345,"Length":35}, {"Name":"Sma","No":678,"Length":45}, {"Name":"Roo","No":136,"Length":56} ]
下面是按照Length元素从大到小排序: SortComparator("Length", "int", "desc") after sort_JsonArray=[ {"Name":"Roo","No":136,"Length":56}, {"Name":"Sma","No":678,"Length":45}, {"Name":"Wel","No":345,"Length":35}, {"Name":"TVS","No":202,"Length":23}, {"Name":"Cus","No":257,"Length":17}, {"Name":"And","No":678,"Length":16}, {"Name":"Sma","No":136,"Length":15}, {"Name":"TVC","No":203,"Length":14} ]
努力做一个伪程序员, 不管道路有多么的艰苦......
posted on 2018-08-12 10:06 努力做一个伪程序员 阅读(4620) 评论(0) 编辑 收藏 举报