使用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的更多相关文章

  1. Java 中常见的各种排序算法汇总

    首先,Java中自已是有排序的 说明:(1)Arrays类中的sort()使用的是“经过调优的快速排序法”;(2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是 ...

  2. JAVA中的集合与排序

    一:常见的集合类 Collection接口  和   Map接口 Collection ①:collection是最常见的集合的上级接口. ②:继承自collection的常用接口有List,Set, ...

  3. Java中Collections类的排序sort函数两种用法

    java中的Colletions类主要实现列表List的排序功能.根据函数参数的传递,具体的排序可以分为 : 1.  自然排序(natural ordering). 函数原型:sort(List< ...

  4. Java中的数据结构及排序算法

    (明天补充) 主要是3种接口:List Set Map List:ArrayList,LinkedList:顺序表ArrayList,链表LinkedList,堆栈和队列可以使用LinkedList模 ...

  5. Java中list集合自定义排序-2022新项目

    一.业务场景 为了加快首页数据查询的效率,因此将首页查询的数据大多数都放在了缓存中,包括各种list集合数据.对这些 从缓存中获取的数据做了一个兜底处理,如果从缓存中没有获取到数据,则直接从数据库中去 ...

  6. Java中对JSONArray中的对象进行排序

    String jsonArrStr = "[ { \"ID\": \"135\", \"Name\": \"Fargo ...

  7. Java中的比较器(排序)

    "顺序"在任何一个领域里都是非常重要的一个概念,程序也不例外.不同的执行顺序,能对你的执行结果产生直接影响. 既然涉及到顺序,那就要求排序.所以本文讨论的就是排序中使用到的比较器C ...

  8. Java中几种常见排序算法

    日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数 ...

  9. Java中List的sort排序重写

    最近遇到需要使用list中sort排序功能,list中存的是自己写的类,所以需要重写sort函数,一般实现如下: Collections.sort(voList, new Comparator< ...

随机推荐

  1. 17、GATK使用简介 Part2/2

    转载:http://blog.sina.com.cn/s/blog_6721167201018jik.html Change Logs: 13/01/12: 增加了一篇文献,外加一些无聊的修改.12/ ...

  2. 【mongodb】json与bson区别

    bson是由10gen开发的一个数据格式,目前主要用于mongoDB中,是mongoDB的数据存储格式.bson基于json格式,选择json进行改造的原因主要是json的通用性及json的schem ...

  3. oracle中文乱码解决方法笔记

    我刚刚在linux下安装oracle时就碰到这个问题,查了半天知道问题是oracle的字符集不对. 解决方法是dbca进入图形界面,删去现有的库,重建新库. 建库时注意: 1,dbca创建, 选第一项 ...

  4. 7.21实习培训日志-JDBC JSP Servlet

    JDBC JSP Servlet 总结 今天早上的考试主要考Java的网络,HttpClient的get,post方法,Socket的文件传输和Xml和Json文件的解析,对于HttpCLient很简 ...

  5. 2018宁夏邀请赛G(DFS,动态规划【VECTOR<PAIR>】)

    //代码跑的很慢四秒会超时,结尾附两秒代码(标程) #include<bits/stdc++.h>using namespace std;typedef long long ll;cons ...

  6. UML——初识

    初识 刚刚接触到UML的时候,先看的书,对整本书的内容做了宏观的把控.感觉UML这个东西和自己想象中的不一样.起初我认为它只是一个工具,将软件开发过程中不同的阶段用不用种类的图表现出来,后来才发现它是 ...

  7. HyperLedger Explore 浏览器配置启动教程

    Hyperledger Fabric维护的实际上是一个区块链网络.为了能够直观的观察网络上的节点,交易等行为,Hyperledger Explore随之诞生. 本文讲述如何搭建 Hyperledger ...

  8. 说一说solr在tomcat,jetty上的运行和安装优缺点

    本文是我从别的文章中组合而成的,结合自己实际操作进行了修改. Solr是什么 Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lu ...

  9. java8List集合根据对象的属性去重

    import static java.util.Comparator.comparingLong; import static java.util.stream.Collectors.collecti ...

  10. 需要命名空间管理器或 XsltContext。此查询具有前缀、变量或用户定义的函数 及 多属性节点查询

    第一个问题, 1. 首先需要引入命名空间, 2. 其次,在用xpath查找结点时,在selectNodes等方法中再次带入命名空间 如 XmlDocument doc = new XmlDocumen ...