json 解析工具 ,谷歌出品
对象转换字符串
HashMap<String,String> hashMap = new HashMap<String, String>();
hashMap.put("id", "1");
hashMap.put("name", "ca");
Gson gson = new Gson();
System.out.println(gson.toJson(hashMap));
在对象转换字符串的时候,遇到hibernate持久化过来的对象,如果对象属性包含某个对象时,如果配置了lazy加载的话,hibernate会放置一个临时代理为这个对象属性 ,倒置 Gson在转换hibernate对象的时候报错,这里可以设置过滤掉对象中的属性代理类,自定义设置想要的输出对象属性,处理方式如下:
GsonUtil 类
package utils;
import org.apache.commons.lang.ArrayUtils;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
public class GsonUtil implements ExclusionStrategy {
private Class<?> target;
private String[] fields;
private Class<?>[] clazz;
private boolean reverse;
public GsonUtil(Class<?> target) {
super();
this.target = target;
}
public boolean shouldSkipClass(Class<?> class1) {
return false;
}
public boolean shouldSkipField(FieldAttributes fieldattributes) {
Class<?> owner = fieldattributes.getDeclaringClass();
Class<?> c = fieldattributes.getDeclaredClass();
String f = fieldattributes.getName();
boolean isSkip = false;
if (owner == target) {
if (ArrayUtils.contains(fields, f)) {
isSkip = true;
}
if (ArrayUtils.contains(clazz, c)) {
isSkip = true;
}
if (reverse) {
isSkip = !isSkip;
}
}
return isSkip;
}
public void setFields(String[] fields) {
this.fields = fields;
}
public void setClazz(Class<?>[] clazz) {
this.clazz = clazz;
}
public void setReverse(boolean reverse) {
this.reverse = reverse;
}
}
代码调用
Dog dog = new Dog();
dog.setAge("12");
dog.setId("454");
dog.setName("白狗");
GsonUtil gsonUtil = new GsonUtil(Dog.class);
GsonBuilder builder = new GsonBuilder();
gsonUtil.setFields(new String[]{"id","name"});
gsonUtil.setReverse(true);
builder.addSerializationExclusionStrategy(gsonUtil);
Gson gson = builder.create();
System.out.println(gson.toJson(dog));
字符串转对象
Gson gson = new Gson();
String jsonstr="{\"id\":\"454\",\"name\":\"白狗\"}";
System.out.println(gson.fromJson(jsonstr, Dog.class));
//在转换为泛型类的时候 需如下转换
list = gson.fromJson(result, new TypeToken<List<Object[]>>() {}.getType())
附件:
