今天上班优化代码的时候,发现从Redis中取出List<Map<String,String>>
格式的json字符串,通过net.sf.json将其转成List的时候,如果List.size()在1000左右时,消耗处理时间为1000ms,效率非常低;然后搜了下java解析json常用api,发现alibaba的fastJson处理效率还是不错的,当size在1000左右时,也就不足100ms。
然后。。。。回家就简单对比了下几个json处理方式:FastJson、Jackson、Gson、org.Json;
首先maven引入依赖:
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.35</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0.pr4</version>
</dependency>
编写相应的类,测试jsonStr–list,list–jsonStr的处理时间
- org.json
package com.love.yu.maven.learn.json;
import java.util.List;
import org.json.JSONArray;
public class TestJson {
public void testJsonStr2List(String str) {
long a = System.currentTimeMillis();
JSONArray jsonArray = new JSONArray(str);
List<Object> list = jsonArray.toList();
long b = System.currentTimeMillis();
System.out.println("JsonStr2List:size=" + list.size() + ",time=" + (b - a));
}
public String testJsonList2Str(List<String> list) {
long a = System.currentTimeMillis();
JSONArray array = new JSONArray(list);
String str = array.toString();
long b = System.currentTimeMillis();
System.out.println("JsonList2Str:length=" + str.length() + ",time=" + (b - a));
return str;
}
}
- fastJson
package com.love.yu.maven.learn.json;
import java.util.List;
import com.alibaba.fastjson.JSONArray;
public class TestFastJson {
public void testFastJsonStr2List(String str) {
long a = System.currentTimeMillis();<