对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>