importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.serializer.JSONLibDataFormatSerializer;
importcom.alibaba.fastjson.serializer.JSONSerializerMap;
importcom.alibaba.fastjson.serializer.SerializerFeature;
privatestatic final SerializeConfig config;
static{
config = newSerializeConfig();
config.put(java.util.Date.class,newJSONLibDataFormatSerializer());
config.put(java.sql.Date.class,newJSONLibDataFormatSerializer());
}
privatestatic final SerializerFeature[] features = { SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.WriteNullBooleanAsFalse,
SerializerFeature.WriteNullStringAsEmpty
};
publicstatic String toCompatibleJSONString(Object object) {
returnJSON.toJSONString(object, config, features);
}
</div> </td> </tr> </tbody> </table> </div> </div> </div> </div>
通过上面代码中的toCompatibleJSONString方法,你就可以实现完全兼容json-lib了。
反序列化
反序列化就是把JSON格式的文本转化为Java Bean对象。
指定Class信息反序列化
通过指定类型信息,可以很方便的将"JSON文本"反序列化为"Java Bean"对象,例如:
String text = ...; Color color = JSON.parseObject(text, Color.class);
</div> </td> </tr> </tbody> </table> </div> </div> </div> </div> 类型集合的反序列化 这个接口类似于parseObject String text = ...; List<User> users = JSON.parseArray(text, User.class);
</div> </td> </tr> </tbody> </table> </div> </div> </div> </div> 泛型的反序列化 如果你需要返回一个带泛型的对象,例如List<User>、Map<String, User>,你可以使用TypeReference来传入类型信息。 String text = ...; Map<String, User> userMap = JSON.parseObject(text, newTypeReference<Map<String, User>>() {});
</div> </td> </tr> </tbody> </table> </div> </div> </div> </div> 组合类型集合的反序列化 比如在网络协议中,经常会存在这样的组合: [{}]
</div> </td> </tr> </tbody> </table> </div> </div> </div> </div> fastjson对这种结构的反序列化有专门支持。 String text = ...; Type[] types = newType[] {Header.class, Body.class}; List<Object> list = JSON.parseArray(text, types); Header header = (Header) list.get(0); Body body = (Body) list.get(1);
</div> </td> </tr> </tbody> </table> </div> </div> </div> </div> 使用@JSONCreator来指定构造函数来创建对象 如果你的JavaBean没有缺省构造函数,可以使用@JSONCreator来指定构造函数 publicstatic class Entity { privatefinal int id; privatefinal String name; @JSONCreator publicEntity(@JSONField(name = "id")intid,@JSONField(name = "name") String name){ this.id = id; this.name = name; } publicint getId() { returnid; } publicString getName() { returnname; } }
</div> </td> </tr> </tbody> </table> </div> </div> </div> </div> 把JSON文本反序列化为一个原型接口 publicstatic interface Bean { intgetId(); voidsetId(intvalue); String getName(); voidsetName(String value); } String text = "{\"id\":123, \"name\":\"chris\"}"; Bean bean = JSON.parseObject(text, Bean.class); Assert.assertEquals(123, bean.getId()); Assert.assertEquals("chris", bean.getName()); bean.setId(234); Assert.assertEquals(234, bean.getId()); 出自: </div> </td> </tr> </tbody> </table> </div> </div> </div> </div>
| | | | | | |