zoukankan      html  css  js  c++  java
  • json工具包比较 fastjson jackson gson

    对json进行json-object进行相互转化时,笔者接触到三种工具jar,现对其进行比较。

    fastjson:速度最快,阿里巴巴开源。

    jackson:springMvc 默认使用。

    gson:谷歌开源。

    下面就按照 学校—年级—班级 举例一个比较特殊的json串。

    [

     {

       "NAME":"学校1",

         "STULIST":[{"Name":"学生1"},{"Name":"学生2"}]

     },

     {

       "NAME":"学校2",

       "STULIST":[{"Name":"学生1"},{"Name":"学生2"}]

     }

    ]

    以上是gson转化的。

    当用fastjson时,如下:

    [{"nAME":"学校1","sTULIST":[{"name":"学生1"},{"name":"学生2"}]},{"nAME":"学校2","sTULIST":[{"$ref":"$[0].sTULIST[0]"},{"$ref":"$[0].sTULIST[1]"}]}]

    真难理解{"$ref":"$[0].sTULIST[0]"}为什么出现,看来速度最快还是需要付出代价的。

    当用jackson时,如下:

    [{"name":"学校1","stulist":[{"name":"学生1"},{"name":"学生2"}]},{"name":"学校2","stulist":[{"name":"学生1"},{"name":"学生2"}]}]

    三种不同的json串实际是用同一个Object转化的,造成不同的原因如下:

    Object中字段名用的是大写。字段中对象的映射的用的是同一个({"$ref":"$[0].sTULIST[0]"}出现的原因)。

    综上:如果中规中矩的规定json格式文档,那么还是推荐使用fastjson,速度快,直接使用静态方法简单。

         如果实在面对了非正常的,那么推荐gson进行解析。这里,先留下一个问题:springMvc进行影射时,是否可以替换jackson?

    最后:给出代码以及相应的jar包的maven配置。

    public class School implements Serializable{
        
        private static final long serialVersionUID = 3585956609245039680L;
    
        private String NAME;
        private List<Grade> STULIST;
        public String getNAME() {
            return NAME;
        }
        public void setNAME(String nAME) {
            NAME = nAME;
        }
        public List<Grade> getSTULIST() {
            return STULIST;
        }
        public void setSTULIST(List<Grade> sTULIST) {
            STULIST = sTULIST;
        }
    }
    public class Grade implements Serializable{
    
        private static final long serialVersionUID = -4663159506410560454L;
        
        private String Name;
        public String getName() {
            return Name;
        }
        public void setName(String name) {
            Name = name;
        }
    }
    public class App {
        public static void main( String[] args ) throws Exception
        {
            Grade stu1 = new Grade();
            stu1.setName("学生1");
            
            Grade stu2 = new Grade();
            stu2.setName("学生2");
            
            Grade stu3 = new Grade();
            stu3.setName("学生3");
            
            Grade stu4 = new Grade();
            stu4.setName("学生4");
            
            List<Grade> stuList = new ArrayList<Grade>();
            stuList.add(stu1);
            stuList.add(stu2);
            List<Grade> stuList2 = new ArrayList<Grade>();
            stuList2.add(stu1);
            stuList2.add(stu2);
            
            School group1 = new School();
            group1.setNAME("学校1");
            group1.setSTULIST(stuList);
            
            School group2 = new School();
            group2.setNAME("学校2");
            group2.setSTULIST(stuList2);
            
            List<School> groupList = new ArrayList<School>();
            groupList.add(group1);
            groupList.add(group2);
            
            System.out.println("fastjson :");
            String fastjsonJson = JSONObject.toJSONString(groupList);
            System.out.println(fastjsonJson);
            
            System.out.println("
     jackson :");
            ObjectMapper m = new ObjectMapper();
            String jacksonJson = m.writeValueAsString(groupList);
            System.out.println(jacksonJson);
            
            System.out.println("
     gson :");
            Gson gson = new Gson();
            String gsonJson = gson.toJson(groupList);
            System.out.println(gsonJson);
        }
    }
    <!-- fastjson 依赖jar -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.7</version>
            </dependency>
            
            <!-- gson 依赖jar -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.6.3</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.6.3</version>
            </dependency>
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>2.6.3</version>
            </dependency>
            
            <!-- gson 依赖jar -->
            <dependency>
                <groupId>com.google.code.gson</groupId>
                <artifactId>gson</artifactId>
                <version>2.2.2</version>
            </dependency>
  • 相关阅读:
    《Code Complete》第一部分纪要
    深入理解Java虚拟机-JVM内存管理的猜测
    成长经验系列之三-猜想-技术未来
    深入理解Java虚拟机-第三版-前言及第一章笔记
    float与double的精度问题
    成长经验系列之二-方法-成长分享
    工作可能用的一些网站(不定时更新)
    Walkthrough: Write your first client script
    Make a Field Required in a Dynamics CRM Dialog / PowerApps
    Refresh Power BI Dataset programmatically from Dynamics 365 CRM/PowerApps
  • 原文地址:https://www.cnblogs.com/shuaixianbohou/p/4899449.html
Copyright © 2011-2022 走看看