JOSN 解析工具类常用类库分别为:Gson,FastJson,Jackson,Json-lib。
选择一个合适的JSON库要从多个方面进行考虑:
-
字符串解析成JSON性能
-
字符串解析成JavaBean性能
-
JavaBean构造JSON性能
-
集合构造JSON性能
-
易用性
pom 文件引入:
<!-- Json libs--> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.46</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.4</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.4</version> </dependency>
public class FastJsonUtil { public static String bean2Json(Object obj) { return JSON.toJSONString(obj); } public static <T> T json2Bean(String jsonStr, Class<T> objClass) { return JSON.parseObject(jsonStr, objClass); } }
public class GsonUtil { private static Gson gson = new GsonBuilder().create(); public static String bean2Json(Object obj) { return gson.toJson(obj); } public static <T> T json2Bean(String jsonStr, Class<T> objClass) { return gson.fromJson(jsonStr, objClass); } public static String jsonFormatter(String uglyJsonStr) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(uglyJsonStr); return gson.toJson(je); } }
public class JacksonUtil { private static ObjectMapper mapper = new ObjectMapper(); public static String bean2Json(Object obj) { try { return mapper.writeValueAsString(obj); } catch (JsonProcessingException e) { e.printStackTrace(); return null; } } public static <T> T json2Bean(String jsonStr, Class<T> objClass) { try { return mapper.readValue(jsonStr, objClass); } catch (IOException e) { e.printStackTrace(); return null; } } }
public class JsonLibUtil { public static String bean2Json(Object obj) { JSONObject jsonObject = JSONObject.fromObject(obj); return jsonObject.toString(); } @SuppressWarnings("unchecked") public static <T> T json2Bean(String jsonStr, Class<T> objClass) { return (T) JSONObject.toBean(JSONObject.fromObject(jsonStr), objClass); } }
总结:
序列化角度分析:序列化次数比较小的时候,Gson性能最好,当不断增加的时候到了100000,Gson明细弱于Jackson和FastJson, 其中FastJson性能是最牛,另外还可以看到不管数量少还是多,Jackson一直表现优异。而那个Json-lib基本上就是打酱油的角色。
反序列化角度分析:Gson、Jackson和FastJson区别不大,性能都很优异,而那个Json-lib再次以打酱油的角色以此凸显别的json类库的优秀。