public class JsonUtil extends Object
JsonUtil类是基于fastjson进行一层封装,提供Java对象和json字符串之间的相互转换。
由于fastjson较Jackson,gson等解析JSON的jar出现较晚,吸收了实际应用中的一些特点,
所以可以认为fastjson相对效率较高。
请注意:本工具类提供的方法默认禁用了循环引用的问题,就不会出现$ref等字符。所谓循环引用一般出现在引用同一个对象(对象重复),对象自引用(父子关系都是一个类) 没有禁用循环引用时的json字符串为:[{"group":{"groupName":"Test组","id":1},"hobbies":["游泳","上网"],"id":1,"password":"123456"},{"group":{"groupName":"Test组","id":2},"hobbies":["电影","book"],"id":2,"password":"123456"},{"birthDay":"1992-02-12 15:32:09","group":{"$ref":"$[1].group"},"hobbies":["电影","book"],"id":3,"password":"xxxxxx"}] 禁用了循环引用后的json字符串为:[{"group":{"groupName":"Test组","id":1},"hobbies":["游泳","上网"],"id":1,"password":"123456"},{"group":{"groupName":"Test组","id":2},"hobbies":["电影","book"],"id":2,"password":"123456"},{"birthDay":"1992-02-12 15:31:28","group":{"groupName":"Test组","id":2},"hobbies":["电影","book"],"id":3,"password":"xxxxxx"}]
本工具类仅封装常用的相互转换方法,包括属性过滤等方法。fastjson提供很多高级方法,这个需要自己阅读官网文档。
| 限定符和类型 | 方法和说明 |
|---|---|
static <T> T |
fromJson(String json,
Class<T> clazz)
将json字符串转为Java对象
|
static <T> T |
fromJson(String json,
TypeRef<T> typeRef)
将复杂的json字符串转为Java对象
|
static void |
println(Object value)
向控制台打印格式化过的json字符串
|
static String |
toJson(Object value,
Map<Class<?>,List<String>> classOfProps)
将Java对象转换为JSON字符串,会过滤掉指定类中的属性,不会污染到其它类中的同名属性。
|
static String |
toJson(Object value,
com.alibaba.fastjson.serializer.SerializerFeature... features)
将Java对象转换为JSON字符串,该方法提供了开放的转换规则,比如出现了死循环而导致了结果不正确。
|
static <T> String |
toJson(T value)
将Java对象转换JSON字符串.
|
static <T> String |
toJson(T value,
boolean toUnicode,
String... propertyNames)
将Java对象转换JSON字符串。
|
static <T> String |
toJson(T value,
String... propertyNames)
将Java对象转换JSON字符串。
|
public static <T> String toJson(T value)
中文字符换转成unicode码;如果不希望转换unicode码,则使用toJson(Object, boolean, String...)
User user = new User("admin","123456");
JsonUtil.toJson(user);
T - 泛型类型value - Java对象toJson(Object, boolean, String...)public static <T> String toJson(T value, String... propertyNames)
toJson(Object, Map)
中文字符换转成unicode码;如果不希望转换unicode码,则使用toJson(Object, boolean, String...)
User user = new User("admin","123456");
JsonUtil.toJson(user,"username");// --- {"password":"123456"}
T - 泛型类型value - Java对象propertyNames - 需要过滤的属性列表toJson(Object, boolean, String...)public static <T> String toJson(T value, boolean toUnicode, String... propertyNames)
T - 泛型类型value - 待处理的对象toUnicode - 如果值为true则自动转成unicode码,否则不处理propertyNames - 过滤的属性名,可为空public static String toJson(Object value, Map<Class<?>,List<String>> classOfProps)
Map<Class<?>, List<String>> map = new HashMap<Class<?>, List<String>>(2);
map.put(Person.class, Arrays.asList("username"));
map.put(Group.class, Arrays.asList("id"));
System.out.println(toJson(list, map));
value - Java对象classOfProps - 需要过滤的属性列表public static String toJson(Object value, com.alibaba.fastjson.serializer.SerializerFeature... features)
SerializerFeature对象枚举
SerializerFeature.DisableCircularReferenceDetect 禁用循环引用SerializerFeature.WriteClassName json序列化时将类信息保存以便反序列化时可以自动获取类信息SerializerFeature.BeanToArray 将Java对象转换为数组,这可能已经不是json序列化的范围之内SerializerFeature.PrettyFormat 用于显示格式化过的json字符串,一般用于输出控制台效果较好。SerializerFeature.UseSingleQuotes 使用单引号,默认使用双引号SerializerFeature.WriteDateUseDateFormat 日期格式化输出,日期格式为:yyyy-MM-dd HH:mm:ssSerializerFeature.BrowserCompatible 解决中文乱码,会转成Unicode码value - Java对象features - 序列化规则public static <T> T fromJson(String json, Class<T> clazz)
T - 泛型类型json - json字符串clazz - 转换的类型public static <T> T fromJson(String json, TypeRef<T> typeRef)
T - 泛型类型json - 复杂的json字符串typeRef - 转换的类型public static void println(Object value)
value - Java对象Copyright © 2017. All rights reserved.