よく使う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これは特別なすごいところが見えません.
    テストケース
    ベースクラス
  • 単純オブジェクト一つは、単純属性のみのクラス
  • です.
    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;
        }
    }
    
    
  • DataUtilsは、統一試験データを構築するためのツールクラス
  • を構築する.
    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;
        }
    }
    
    
    テストケース
  • fast jsonテストクラスは、抽象的なクラスを引き継いで統一的なテスト方法を実現する
  • .
    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));
        }
    
    
    }
    
    
  • Jacksonテストクラスは、Jacksonを使用して実現された統一的なテストケースで抽象クラスを継承する
  • 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));
        }
    
    }
    
    
  • gson試験クラスgsonは、統一的な試験クラスの継承を実現します.
    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));
        }
    
    
    }
    
    
  • genson試験種別gensonが実現した試験種別継承抽象類
  • 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> result = new ArrayList<>();
            long now = System.currentTimeMillis();
            result.add(get(TestJackson.class, size));
            result.add(get(TestGson.class, size));
            result.add(get(TestGenson.class, size));
            result.add(get(TestFastJson.class, size));
            System.out.println("   :" + (System.currentTimeMillis() - now) + "ms");
            System.out.println("    -------------------------------");
            result.forEach(f -> {
                System.out.println("       " + f.get("class"));
                System.out.println("      " + f.get("avgTime") + "ms");
                System.out.println("         " + f.get("testList"));
                System.out.println("--------------------------------");
            });
        }
    
        private static Map get(Class extends TestCase> tClass, int size) {
            TestSuite testSuite = new TestSuite();
            testSuite.addTestSuite(tClass);
            long now;
            List list = new ArrayList<>();
            for (int i = 0; i < size; i++) {
                now = System.currentTimeMillis();
                TestRunner.run(testSuite);
                list.add(System.currentTimeMillis() - now);
            }
            Map map = new HashMap<>();
            map.put("class", tClass);
            map.put("testList", list);
            map.put("avgTime", list.stream().collect(Collectors.averagingLong(a -> a)));
            return map;
        }
    }
    
    
    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>>() {
            }.getType());
            System.out.println("  Gson  ...");
            printType(mapResult1);
            System.out.println(mapResult1);
            //Json
            ObjectMapper mapper = new ObjectMapper();
            Map> jsonMapResult1 = mapper.readValue(json, new TypeReference>>() {
            });
            System.out.println("  Jackson  ...");
            printType(jsonMapResult1);
    
            System.out.println(jsonMapResult1);
    
        }
    
        public static void printType(Map> map) {
            for (Map.Entry> entry : map.entrySet()) {
                System.out.println("key   :" + entry.getKey().getClass() + ", value  :"
                        + entry.getValue().getClass() + ", List     " + entry.getValue().get(0).getClass());
            }
    
        }
    
    
    }
    
    
    締め括りをつける
    javaはJson関連の操作工具のカバンを処理するのは多いですが、上に述べたように簡単でスピードを要求する対象とjsonに対して直接fast jsonを使えばいいです.でも、たまにfast json会坑のお父さんは他の状況でjacksonを使えば、gsonにも適任できます.でも、jacksonがもっと好きです.オーディエンスが行くのは間違いないです.パンチングのあるものは必ずjacksonやgsonで使います.そうしないと、逆に順番を変えてほしいタイプに変えられないかもしれません.特にfast jsonは第一階の汎型の複雑な泛型の直接ggしか処理できません.