帅先勃

博客园 首页 新随笔 联系 订阅 管理

对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("\r\n jackson :");
        ObjectMapper m = new ObjectMapper();
        String jacksonJson = m.writeValueAsString(groupList);
        System.out.println(jacksonJson);
        
        System.out.println("\r\n 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>

 

posted on 2015-10-21 23:23  帅先勃  阅读(698)  评论(0编辑  收藏  举报