Gson解析json数据很是强大,但有的时候如果使用不当,也很麻烦。
1 “循环序列化” 异常
解决方法为在可能造成的循环序列化的字段加上 transient。
transient private Menu parent;//父节点
2 排序特定字段
比如 :User的json数据为{id:”1” , name:”syxchina”, password:”syx”},我们解析的时候是不想把password解析,我们想得到格式为:{id:”1” , name:”syxchina”}。
第一种方法是使用Gson自带的注解,但任何时候取数据都没的那个字段。
第二种方法使用GsonBuilder,设置ExclusionStrategy参数。
//原串:{id:"1" , name:"syx", password:"syx"} //效果:{id:"1" , name:"syx"} private static Gson gsonMenuComboTree = new GsonBuilder()// .setExclusionStrategies(new MenuTreeExclusionStrategy())// .create(); private static class MenuTreeExclusionStrategy implements ExclusionStrategy{ public boolean shouldSkipField(FieldAttributes f) { if("password".equals(f.getName())) return true; return false; } public boolean shouldSkipClass(Class<?> clazz) { return false; } }
3 修改字段json显示
//JSON: {id:"1" , name:"syx", password:"syx"}
//OUT : {id:"1" , name:"syx", modifyField:"syx"} private static Gson gsonMenuComboTree = new GsonBuilder()// .setFieldNamingStrategy(new MenuTreeFieldNamingStrategy())// .create();
private static class MenuTreeFieldNamingStrategy implements FieldNamingStrategy { public String translateName(Field f) { if ("password".equals(f.getName())) { return "modifyField"; } return f.getName(); } }