Java中對jsonArray的排序,使用的是Gson

來源:互聯網
上載者:User

標籤:結果   new   sign   方法   auto   rri   gen   預設   roo   

使用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}]

 

Java中對jsonArray的排序,使用的是Gson

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.