よく使うjson解析フレームの比較
31932 ワード
title:常用json解析フレームの比較comments:true categories:実戦tags: json tools abbralink:fd 97 bf 37 date:2018-07-17 14:52: 前言
最近はhttpに基づいてrpcとしてプロトコルを呼び出す時に、jsonを使ってデータを伝達することを選択しますので、一波でよく使われるjson解析フレームの性能、安定性、カスタマイズ性、使用困難度、複雑なオブジェクトに対するサポートの度合いなどを比較してみてください.よく使われているいくつかのjson解析フレームの対比だけに、いくつかの面で優秀なものがあります.
比較
名前?の使用方法は、構成可能性のある利点があります.备注????:---?=---?fastjson?JSON.toJSONString、JSON.parsebjjjectを使用して直接的に変換することができます.とても弱いです.一般的な処理が非常に弱いため、簡単なオブジェクトとjson文字列の変換が適用されます.object Mapperオブジェクトを取得するには、writeValue Astring()、readValue()方式で相互に変換してDeserialzation Configs、Serizationの様々な構成を提供します.一般的なサポートについては、改善された|機能が多すぎて、複雑な使用、構成が複雑で、new_springなどの一般的な枠組みで使われているのは、Jacksonであり、速度を保証しています.複雑な状況に対応しています.gsonを導入したくないです.jacksonを直接使うスピードはfastjsonと同じですが、多くの複雑な機能を扱うことができます.方法は互いに変換し合って、Gson Buiderを提供して、異なる処理方式のgson実例機能を配置します.一般的なサポートに対して、改善された速度とjacksonとfastjsonは比較的に遅くて、使う時はgson依存を専門に引用します.複雑なオブジェクトとjson文字列を処理するための例示的なオブジェクトが必要です.しかし、速度はJacksonには及ばないです.Genson Buiderを提供するために、ゲセンオブジェクトを取得するためには、Serialize()、deseserialize()によって、変換することができます.スピードが遅いです.これは少ないです.簡単な相手に直接fastjsonを変換するなら、複雑なjackson、gsonこれは特別なすごいところが見えません.
テストケース
ベースクラス単純オブジェクト一つは、単純属性のみのクラス です.複合オブジェクトの一つで、やや複雑な点のクラスは、属性がオブジェクトであるという種類を含みます. DataUtilsは、統一試験データを構築するためのツールクラス を構築する.テストケースの統一インターフェースが、様々な解析フレームワークのテストケースを定義するフォーマット テストケースの統一された抽象的なクラスの実装のための統一されたインターフェースは、すべてのテストケースの実装に統一された配置抽象的なクラスを提供するすべてのテストケースクラスの共通の構成、前置後置方法 を提供します. fast jsonテストクラスは、抽象的なクラスを引き継いで統一的なテスト方法を実現する . Jacksonテストクラスは、Jacksonを使用して実現された統一的なテストケースで抽象クラスを継承する gson試験クラスgsonは、統一的な試験クラスの継承を実現します. genson試験種別gensonが実現した試験種別継承抽象類 すべてのテストクラスが統一的に大量試験を行うことができます.
一回のテスト結果記録
javaはJson関連の操作工具のカバンを処理するのは多いですが、上に述べたように簡単でスピードを要求する対象とjsonに対して直接fast jsonを使えばいいです.でも、たまにfast json会坑のお父さんは他の状況でjacksonを使えば、gsonにも適任できます.でも、jacksonがもっと好きです.オーディエンスが行くのは間違いないです.パンチングのあるものは必ずjacksonやgsonで使います.そうしないと、逆に順番を変えてほしいタイプに変えられないかもしれません.特にfast jsonは第一階の汎型の複雑な泛型の直接ggしか処理できません.
最近はhttpに基づいてrpcとしてプロトコルを呼び出す時に、jsonを使ってデータを伝達することを選択しますので、一波でよく使われるjson解析フレームの性能、安定性、カスタマイズ性、使用困難度、複雑なオブジェクトに対するサポートの度合いなどを比較してみてください.よく使われているいくつかのjson解析フレームの対比だけに、いくつかの面で優秀なものがあります.
比較
名前?の使用方法は、構成可能性のある利点があります.备注????:---?=---?fastjson?JSON.toJSONString、JSON.parsebjjjectを使用して直接的に変換することができます.とても弱いです.一般的な処理が非常に弱いため、簡単なオブジェクトとjson文字列の変換が適用されます.object Mapperオブジェクトを取得するには、writeValue Astring()、readValue()方式で相互に変換してDeserialzation Configs、Serizationの様々な構成を提供します.一般的なサポートについては、改善された|機能が多すぎて、複雑な使用、構成が複雑で、new_springなどの一般的な枠組みで使われているのは、Jacksonであり、速度を保証しています.複雑な状況に対応しています.gsonを導入したくないです.jacksonを直接使うスピードはfastjsonと同じですが、多くの複雑な機能を扱うことができます.方法は互いに変換し合って、Gson Buiderを提供して、異なる処理方式のgson実例機能を配置します.一般的なサポートに対して、改善された速度とjacksonとfastjsonは比較的に遅くて、使う時はgson依存を専門に引用します.複雑なオブジェクトとjson文字列を処理するための例示的なオブジェクトが必要です.しかし、速度はJacksonには及ばないです.Genson Buiderを提供するために、ゲセンオブジェクトを取得するためには、Serialize()、deseserialize()によって、変換することができます.スピードが遅いです.これは少ないです.簡単な相手に直接fastjsonを変換するなら、複雑なjackson、gsonこれは特別なすごいところが見えません.
テストケース
ベースクラス
package com.ming.json;
import java.math.BigDecimal;
/**
*
*
* @author ming
* @date 2018-07-17 16:11:05
*/
public class MyData {
private Integer id;
private String name;
private BigDecimal age;
@Override
public String toString() {
return "MyData{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getAge() {
return age;
}
public void setAge(BigDecimal age) {
this.age = age;
}
}
package com.ming.json;
/**
*
*
* @author ming
* @date 2018-07-17 16:11:15
*/
public class CyclicData {
private Integer id;
private CyclicData cyclicData;
@Override
public String toString() {
return "CyclicData{" +
"id=" + id +
", cyclicData=" + cyclicData +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public CyclicData getCyclicData() {
return cyclicData;
}
public void setCyclicData(CyclicData cyclicData) {
this.cyclicData = cyclicData;
}
}
package com.ming.json;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* json
*
* @author ming
* @date 2018-07-17 15:30:30
*/
public class DataUtils {
/**
* String list
*
* @param size
* @author ming
* @date 2018-07-17 16:08:50
*/
public static List getStringList(int size) {
List resultList = new ArrayList<>();
for (int i = 0; i < size; i++) {
resultList.add("test" + i);
}
return resultList;
}
/**
* String String map
*
* @param size
* @author ming
* @date 2018-07-17 16:09:04
*/
public static Map getStringMap(int size) {
Map resultMap = new HashMap<>();
for (int i = 0; i < size; i++) {
resultMap.put("k" + i, "v" + i);
}
return resultMap;
}
/**
*
*
* @author ming
* @date 2018-07-17 16:09:20
*/
public static MyData getMyData() {
MyData myData = new MyData();
myData.setId(1);
myData.setName("ming");
myData.setAge(BigDecimal.TEN);
return myData;
}
/**
* list
*
* @param size
* @author ming
* @date 2018-07-17 16:09:30
*/
public static List getMyDataList(int size) {
List resultList = new ArrayList<>();
for (int i = 0; i < size; i++) {
MyData tmp = new MyData();
tmp.setId(i);
tmp.setName("ming" + i);
tmp.setAge(BigDecimal.valueOf(i));
resultList.add(tmp);
}
return resultList;
}
/**
* String map
*
* @param size
* @author ming
* @date 2018-07-17 16:09:47
*/
public static Map getMyDataMap(int size) {
Map resultMap = new HashMap<>();
for (int i = 0; i < size; i++) {
MyData tmp = new MyData();
tmp.setId(i);
tmp.setName("ming" + i);
tmp.setAge(BigDecimal.valueOf(i));
resultMap.put("k" + i, tmp);
}
return resultMap;
}
/**
*
*
* @author ming
* @date 2018-07-17 16:10:03
*/
public static CyclicData getCyclicData() {
CyclicData result = new CyclicData();
result.setId(1);
CyclicData tmp = new CyclicData();
tmp.setId(2);
result.setCyclicData(tmp);
return result;
}
/**
* list
*
* @param size
* @author ming
* @date 2018-07-17 16:10:17
*/
public static List getCyclicDataList(int size) {
List resultList = new ArrayList<>();
for (int i = 0; i < size; i++) {
CyclicData tmp = new CyclicData();
tmp.setId(i);
CyclicData t = new CyclicData();
tmp.setId(i * 1000);
tmp.setCyclicData(t);
resultList.add(tmp);
}
return resultList;
}
/**
* map
*
* @param size
* @author ming
* @date 2018-07-17 16:10:32
*/
public static Map getCyclicDataMap(int size) {
Map resultMap = new HashMap<>();
for (int i = 0; i < size; i++) {
CyclicData tmp = new CyclicData();
tmp.setId(i);
CyclicData t = new CyclicData();
tmp.setId(i * 1000);
tmp.setCyclicData(t);
resultMap.put("k" + i, tmp);
}
return resultMap;
}
/**
* kv map
*
* @param size
* @author ming
* @date 2018-07-17 16:10:49
*/
public static Map getMyDataAndCyclicDataMap(int size) {
Map resultMap = new HashMap<>();
for (int i = 0; i < size; i++) {
CyclicData tmp = new CyclicData();
tmp.setId(i);
CyclicData t = new CyclicData();
tmp.setId(i * 1000);
tmp.setCyclicData(t);
MyData k = new MyData();
k.setId(i);
k.setName("ming" + i);
k.setAge(BigDecimal.valueOf(i));
resultMap.put(k, tmp);
}
return resultMap;
}
}
package com.ming.json;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.io.IOException;
public interface TestJson {
// json -------------------------------------------------------------------------------------------
void testStringListObjToString() throws JsonProcessingException;
void testStringMapObjToString() throws JsonProcessingException;
void testMyDataToString() throws JsonProcessingException;
void testMyDataListToString() throws JsonProcessingException;
void testMyDataMapToString() throws JsonProcessingException;
void testCyclicDataToString() throws JsonProcessingException;
void testCyclicDataListToString() throws JsonProcessingException;
void testCyclicDataMapToString() throws JsonProcessingException;
void testMyDataAndCyclicDataMapToString() throws JsonProcessingException;
//json ------------------------------------------------------------------------------------------
void zTestStringListObjStringToObj() throws IOException;
void zTestStringMapObjStringToObj() throws IOException;
void zTestMyDataStringToObj() throws IOException;
void zTestMyDataListStringToObj() throws IOException;
void zTestMyDataMapStringToObj() throws IOException;
void zTestCyclicDataStringToObj() throws IOException;
void zTestCyclicDataListStringToObj() throws IOException;
void zTestCyclicDataMapStringToObj() throws IOException;
void zTestMyDataAndCyclicDataMapStringToObj() throws IOException;
}
package com.ming.json;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class TestJsonAbstract extends TestCase implements TestJson {
//
protected static String stringList = null;
protected static String stringMap = null;
protected static String myData = null;
protected static String myDataList = null;
protected static String myDataMap = null;
protected static String cyclicData = null;
protected static String cyclicDataList = null;
protected static String cyclicDataMap = null;
protected static String myDataAndCyclicDataMap = null;
//
protected int size = 10000;
protected Long now = null;
private Logger logger = LoggerFactory.getLogger(TestJsonAbstract.class);
@Before
public void init() {
System.out.println(" 。。。。。。");
now = System.currentTimeMillis();
}
@After
public void close() {
System.out.println(" , :" + (System.currentTimeMillis() - now));
logger.info(" , :" + (System.currentTimeMillis() - now));
now = null;
}
}
テストケースpackage com.ming.json;
import com.alibaba.fastjson.JSON;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import java.util.Map;
/**
* fastJson
* test case obj String string obj
*
* @author ming
* @date 2018-07-17 15:23:36
*/
@FixMethodOrder(value = MethodSorters.NAME_ASCENDING)
public class TestFastJson extends TestJsonAbstract {
@Test
@Override
public void testStringListObjToString() {
stringList = JSON.toJSONString(DataUtils.getStringList(size));
System.out.println(stringList);
}
@Test
@Override
public void testStringMapObjToString() {
stringMap = JSON.toJSONString(DataUtils.getStringMap(size));
System.out.println(stringMap);
}
@Test
@Override
public void testMyDataToString() {
myData = JSON.toJSONString(DataUtils.getMyData());
System.out.println(myData);
}
@Test
@Override
public void testMyDataListToString() {
myDataList = JSON.toJSONString(DataUtils.getMyDataList(size));
System.out.println(myDataList);
}
@Test
@Override
public void testMyDataMapToString() {
myDataMap = JSON.toJSONString(DataUtils.getMyDataMap(size));
System.out.println(myDataMap);
}
@Test
@Override
public void testCyclicDataToString() {
cyclicData = JSON.toJSONString(DataUtils.getCyclicData());
System.out.println(cyclicData);
}
@Test
@Override
public void testCyclicDataListToString() {
cyclicDataList = JSON.toJSONString(DataUtils.getCyclicDataList(size));
System.out.println(cyclicDataList);
}
@Test
@Override
public void testCyclicDataMapToString() {
cyclicDataMap = JSON.toJSONString(DataUtils.getCyclicDataMap(size));
System.out.println(cyclicDataMap);
}
@Test
@Override
public void testMyDataAndCyclicDataMapToString() {
myDataAndCyclicDataMap = JSON.toJSONString(DataUtils.getMyDataAndCyclicDataMap(size));
System.out.println(myDataAndCyclicDataMap);
}
@Test
@Override
public void zTestStringListObjStringToObj() {
System.out.println(JSON.parseArray(stringList));
}
@Test
@Override
public void zTestStringMapObjStringToObj() {
System.out.println(JSON.parseObject(stringMap, Map.class));
}
@Test
@Override
public void zTestMyDataStringToObj() {
System.out.println(JSON.parseObject(myData, MyData.class));
}
@Test
@Override
public void zTestMyDataListStringToObj() {
System.out.println(JSON.parseArray(myDataList, MyData.class));
}
@Test
@Override
public void zTestMyDataMapStringToObj() {
System.out.println(JSON.parseObject(myDataMap, Map.class));
}
@Test
@Override
public void zTestCyclicDataStringToObj() {
System.out.println(JSON.parseObject(cyclicData, CyclicData.class));
}
@Test
@Override
public void zTestCyclicDataListStringToObj() {
System.out.println(JSON.parseArray(cyclicDataList, CyclicData.class));
}
@Test
@Override
public void zTestCyclicDataMapStringToObj() {
System.out.println(JSON.parseObject(cyclicDataMap, Map.class));
}
@Test
@Override
public void zTestMyDataAndCyclicDataMapStringToObj() {
System.out.println(JSON.parseObject(myDataAndCyclicDataMap, Map.class));
}
}
package com.ming.json;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import java.io.IOException;
import java.util.List;
import java.util.Map;
/**
* jackson
*
* @author ming
* @date 2018-07-17 15:24:12
*/
@FixMethodOrder(value = MethodSorters.NAME_ASCENDING)
public class TestJackson extends TestJsonAbstract {
// jackson json mapper setConfig objectMapper
private ObjectMapper objectMapper = new ObjectMapper();
public void init1() {
//DeserializationConfig,SerializationConfig
// objectMapper
//objectMapper.setConfig()
//
//objectMapper.configure();
}
@Test
@Override
public void testStringListObjToString() throws JsonProcessingException {
stringList = objectMapper.writeValueAsString(DataUtils.getStringList(size));
System.out.println(stringList);
}
@Test
@Override
public void testStringMapObjToString() throws JsonProcessingException {
stringMap = objectMapper.writeValueAsString(DataUtils.getStringMap(size));
System.out.println(stringMap);
}
@Test
@Override
public void testMyDataToString() throws JsonProcessingException {
myData = objectMapper.writeValueAsString(DataUtils.getMyData());
System.out.println(myData);
}
@Test
@Override
public void testMyDataListToString() throws JsonProcessingException {
myDataList = objectMapper.writeValueAsString(DataUtils.getMyDataList(size));
System.out.println(myDataList);
}
@Test
@Override
public void testMyDataMapToString() throws JsonProcessingException {
myDataMap = objectMapper.writeValueAsString(DataUtils.getMyDataMap(size));
System.out.println(myDataMap);
}
@Test
@Override
public void testCyclicDataToString() throws JsonProcessingException {
cyclicData = objectMapper.writeValueAsString(DataUtils.getCyclicData());
System.out.println(cyclicData);
}
@Test
@Override
public void testCyclicDataListToString() throws JsonProcessingException {
cyclicDataList = objectMapper.writeValueAsString(DataUtils.getCyclicDataList(size));
System.out.println(cyclicDataList);
}
@Test
@Override
public void testCyclicDataMapToString() throws JsonProcessingException {
cyclicDataMap = objectMapper.writeValueAsString(DataUtils.getCyclicDataMap(size));
System.out.println(cyclicDataMap);
}
@Test
@Override
public void testMyDataAndCyclicDataMapToString() throws JsonProcessingException {
myDataAndCyclicDataMap = objectMapper.writeValueAsString(DataUtils.getMyDataAndCyclicDataMap(size));
System.out.println(myDataAndCyclicDataMap);
}
@Test
@Override
public void zTestStringListObjStringToObj() throws IOException {
System.out.println(objectMapper.readValue(stringList, List.class));
}
@Test
@Override
public void zTestStringMapObjStringToObj() throws IOException {
System.out.println(objectMapper.readValue(stringMap, Map.class));
}
@Test
@Override
public void zTestMyDataStringToObj() throws IOException {
System.out.println(objectMapper.readValue(myData, MyData.class));
}
@Test
@Override
public void zTestMyDataListStringToObj() throws IOException {
System.out.println(objectMapper.readValue(myDataList, List.class));
}
@Test
@Override
public void zTestMyDataMapStringToObj() throws IOException {
System.out.println(objectMapper.readValue(myDataMap, Map.class));
}
@Test
@Override
public void zTestCyclicDataStringToObj() throws IOException {
System.out.println(objectMapper.readValue(cyclicData, CyclicData.class));
}
@Test
@Override
public void zTestCyclicDataListStringToObj() throws IOException {
System.out.println(objectMapper.readValue(cyclicDataList, List.class));
}
@Test
@Override
public void zTestCyclicDataMapStringToObj() throws IOException {
System.out.println(objectMapper.readValue(cyclicDataMap, Map.class));
}
@Test
@Override
public void zTestMyDataAndCyclicDataMapStringToObj() throws IOException {
System.out.println(objectMapper.readValue(myDataAndCyclicDataMap, Map.class));
}
}
package com.ming.json;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import java.util.List;
import java.util.Map;
/**
* gson
*
* @author ming
* @date 2018-07-17 15:23:58
*/
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestGson extends TestJsonAbstract {
private Gson gson = new GsonBuilder().create();
@Test
@Override
public void testStringListObjToString() {
stringList = gson.toJson(DataUtils.getStringList(size));
System.out.println(stringList);
}
@Test
@Override
public void testStringMapObjToString() {
stringMap = gson.toJson(DataUtils.getStringMap(size));
System.out.println(stringMap);
}
@Test
@Override
public void testMyDataToString() {
myData = gson.toJson(DataUtils.getMyData());
System.out.println(myData);
}
@Test
@Override
public void testMyDataListToString() {
myDataList = gson.toJson(DataUtils.getMyDataList(size));
System.out.println(myDataList);
}
@Test
@Override
public void testMyDataMapToString() {
myDataMap = gson.toJson(DataUtils.getMyDataMap(size));
System.out.println(myDataMap);
}
@Test
@Override
public void testCyclicDataToString() {
cyclicData = gson.toJson(DataUtils.getCyclicData());
System.out.println(cyclicData);
}
@Test
@Override
public void testCyclicDataListToString() {
cyclicDataList = gson.toJson(DataUtils.getCyclicDataList(size));
System.out.println(cyclicDataList);
}
@Test
@Override
public void testCyclicDataMapToString() {
cyclicDataMap = gson.toJson(DataUtils.getCyclicDataMap(size));
System.out.println(cyclicDataMap);
}
@Test
@Override
public void testMyDataAndCyclicDataMapToString() {
myDataAndCyclicDataMap = gson.toJson(DataUtils.getMyDataAndCyclicDataMap(size));
System.out.println(myDataAndCyclicDataMap);
}
@Test
@Override
public void zTestStringListObjStringToObj() {
System.out.println(gson.fromJson(stringList, List.class));
}
@Test
@Override
public void zTestStringMapObjStringToObj() {
System.out.println(gson.fromJson(stringMap, Map.class));
}
@Test
@Override
public void zTestMyDataStringToObj() {
System.out.println(gson.fromJson(myData, MyData.class));
}
@Test
@Override
public void zTestMyDataListStringToObj() {
System.out.println(gson.fromJson(myDataList, List.class));
}
@Test
@Override
public void zTestMyDataMapStringToObj() {
System.out.println(gson.fromJson(myDataMap, Map.class));
}
@Test
@Override
public void zTestCyclicDataStringToObj() {
System.out.println(gson.fromJson(cyclicData, CyclicData.class));
}
@Test
@Override
public void zTestCyclicDataListStringToObj() {
System.out.println(gson.fromJson(cyclicDataList, List.class));
}
@Test
@Override
public void zTestCyclicDataMapStringToObj() {
System.out.println(gson.fromJson(cyclicDataMap, Map.class));
}
@Test
@Override
public void zTestMyDataAndCyclicDataMapStringToObj() {
System.out.println(gson.fromJson(myDataAndCyclicDataMap, Map.class));
}
}
package com.ming.json;
import com.owlike.genson.Genson;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
import java.util.List;
import java.util.Map;
/**
* genson
*
* @author ming
* @date 2018-07-17 15:24:33
*/
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestGenson extends TestJsonAbstract {
private Genson genson = new Genson();
@Test
@Override
public void testStringListObjToString() {
stringList = genson.serialize(DataUtils.getStringList(size));
System.out.println(stringList);
}
@Test
@Override
public void testStringMapObjToString() {
stringMap = genson.serialize(DataUtils.getStringMap(size));
System.out.println(stringMap);
}
@Test
@Override
public void testMyDataToString() {
myData = genson.serialize(DataUtils.getMyData());
System.out.println(myData);
}
@Test
@Override
public void testMyDataListToString() {
myDataList = genson.serialize(DataUtils.getMyDataList(size));
System.out.println(myDataList);
}
@Test
@Override
public void testMyDataMapToString() {
myDataMap = genson.serialize(DataUtils.getMyDataMap(size));
System.out.println(myDataMap);
}
@Test
@Override
public void testCyclicDataToString() {
cyclicData = genson.serialize(DataUtils.getCyclicData());
System.out.println(cyclicData);
}
@Test
@Override
public void testCyclicDataListToString() {
cyclicDataList = genson.serialize(DataUtils.getCyclicDataList(size));
System.out.println(cyclicDataList);
}
@Test
@Override
public void testCyclicDataMapToString() {
cyclicDataMap = genson.serialize(DataUtils.getCyclicDataMap(size));
System.out.println(cyclicDataMap);
}
@Test
@Override
public void testMyDataAndCyclicDataMapToString() {
myDataAndCyclicDataMap = genson.serialize(DataUtils.getMyDataAndCyclicDataMap(size));
System.out.println(myDataAndCyclicDataMap);
}
@Test
@Override
public void zTestStringListObjStringToObj() {
System.out.println(genson.deserialize(stringList, List.class));
}
@Test
@Override
public void zTestStringMapObjStringToObj() {
System.out.println(genson.deserialize(stringMap, Map.class));
}
@Test
@Override
public void zTestMyDataStringToObj() {
System.out.println(genson.deserialize(myData, MyData.class));
}
@Test
@Override
public void zTestMyDataListStringToObj() {
System.out.println(genson.deserialize(myDataList, List.class));
}
@Test
@Override
public void zTestMyDataMapStringToObj() {
System.out.println(genson.deserialize(myDataMap, Map.class));
}
@Test
@Override
public void zTestCyclicDataStringToObj() {
System.out.println(genson.deserialize(cyclicData, CyclicData.class));
}
@Test
@Override
public void zTestCyclicDataListStringToObj() {
System.out.println(genson.deserialize(cyclicDataList, List.class));
}
@Test
@Override
public void zTestCyclicDataMapStringToObj() {
System.out.println(genson.deserialize(cyclicDataMap, Map.class));
}
@Test
@Override
public void zTestMyDataAndCyclicDataMapStringToObj() {
System.out.println(genson.deserialize(myDataAndCyclicDataMap, Map.class));
}
}
package com.ming.json;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
*
* @author ming
* @date 2018-07-17 17:31:55
*/
//@RunWith(Suite.class)
//@Suite.SuiteClasses({TestJackson.class, TestGson.class, TestGenson.class,TestFastJson.class})
public class AllTest {
public static void main(String[] args) {
//
int size = 10000;
List
AllTestクラスのメーンメソッドを開くと、すべてのモジュールのテストを行います.一回のテスト結果記録
:3627599ms
-------------------------------
class com.ming.json.TestJackson
84.3811ms
[439, 215, 184, 183, 176, 198。。。。。]
--------------------------------
class com.ming.json.TestGson
94.915ms
[299, 126, 123, 113, 95, 109, 。。。。]
--------------------------------
class com.ming.json.TestGenson
99.3964ms
[247, 144, 115, 98, 102, 85, 。。。。。]
--------------------------------
class com.ming.json.TestFastJson
84.0026ms
[263, 143, 94, 104, 69, 72, 。。。。。]
--------------------------------
jackson gsonは一般的な特殊処理に対してpackage com.ming.json;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Maps;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* json
* :https://www.jianshu.com/p/ca03c2fe36e3
*
* @author ming
* @date 2018-07-19 14:03:12
*/
public class TestT {
private static ObjectMapper mapper = new ObjectMapper();
private static Gson gson = new Gson();
public static void main(String[] args) throws IOException {
Map> map = Maps.newHashMap();
map.put("one", Arrays.asList(10001L, 10002L, 10003L, 10004L));
map.put("two", Arrays.asList(20001L, 20002L, 20003L, 20004L));
map.put("three", Arrays.asList(30001L, 30002L, 30003L, 30004L));
map.put("four", Arrays.asList(40001L, 40002L, 40003L, 40004L));
String json = new Gson().toJson(map);
System.err.println("======================= =====================");
//Gson
Map> mapResult = gson.fromJson(json, Map.class);
System.out.println(" Gson ...");
// printType(mapResult);
System.out.println(mapResult);
//Json
Map> jsonMapResult = mapper.readValue(json, Map.class);
System.out.println(" Jackson ...");
// printType(jsonMapResult);
System.out.println(jsonMapResult);
System.out.println("======================= =====================");
//Gson
Map> mapResult1 = gson.fromJson(json, new TypeToken
締め括りをつけるjavaはJson関連の操作工具のカバンを処理するのは多いですが、上に述べたように簡単でスピードを要求する対象とjsonに対して直接fast jsonを使えばいいです.でも、たまにfast json会坑のお父さんは他の状況でjacksonを使えば、gsonにも適任できます.でも、jacksonがもっと好きです.オーディエンスが行くのは間違いないです.パンチングのあるものは必ずjacksonやgsonで使います.そうしないと、逆に順番を変えてほしいタイプに変えられないかもしれません.特にfast jsonは第一階の汎型の複雑な泛型の直接ggしか処理できません.