Java中對jsonArray的排序,使用的是Gson
阿新 • • 發佈:2018-08-12
rtt 默認 gen ati object soa col tdi 測試
使用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 voidmain(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} ]
Java中對jsonArray的排序,使用的是Gson