import
com.alibaba.fastjson.JSON;
import
com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer;
import
com.alibaba.fastjson.serializer.JSONSerializerMap;
import
com.alibaba.fastjson.serializer.SerializerFeature;
private
static
final
SerializeConfig config;
static
{
config =
new
SerializeConfig();
config.put(java.util.Date.
class
,
new
JSONLibDataFormatSerializer());
config.put(java.sql.Date.
class
,
new
JSONLibDataFormatSerializer());
}
private
static
final
SerializerFeature[] features = { SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.WriteNullBooleanAsFalse,
SerializerFeature.WriteNullStringAsEmpty
};
public
static
String toCompatibleJSONString(Object object) {
return
JSON.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, new TypeReference<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 = new Type[] {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来指定构造函数 public static class Entity { private final int id; private final String name; @JSONCreator public Entity( @JSONField (name = "id" ) int id, @JSONField (name = "name" ) String name){ this .id = id; this .name = name; } public int getId() { return id; } public String getName() { return name; } }
</div> </td> </tr> </tbody> </table> </div> </div> </div> </div> 把JSON文本反序列化为一个原型接口 public static interface Bean { int getId(); void setId( int value); String getName(); void setName(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>
| | | | | | |