1. 程式人生 > >Java中對jsonArray的排序,使用的是Gson

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

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 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