FastJson与JavaBean之间的转换 FastJson来源于com.alibaba.fastjon.JSON,以下的方法都是序列化操作的静态方法.public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArraypublic sta
FastJson与JavaBean之间的转换
FastJson来源于com.alibaba.fastjon.JSON,以下的方法都是序列化操作的静态方法.
public static final Object toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray
public static final String toJSONString(Object javaObject); //将JavaBean序列化为JSON文本
public static final Object parse(String text); //把JSON文本parse为JSONObject或者JSONArray
public static final JSONObject parseObject(String text); //把JSON文本parse成JSONObject
public static final
T parseObject(String text, Class
clazz); //把JSON文本parse为JavaBean public static final JSONArray parseArray(String text); //把JSON文本parse成JSONArray public static final
List
parseArray(String text, Class
clazz);//把JSON文本parse成JavaBean集合 JSON与JAVA的对应关系: SerializeWriter:相当于StringBuffer JSONArray:相当于List
JSONObject:相当于Map
JSON反序列化没有真正数组,本质类型都是List
在项目中的应用 @RequestMapping(value = "/obtainTheSpecifiedRangePark") public ModelAndView obtainTheSpecifiedRangePark(double lng,double lat,String cityName ){ String cityname="深圳"; // 获取可预订的停车场列表 List
infoList = parkingCarService.obtainRangePark(lng,lat,cityname); HashMap
params = new HashMap
(); params.put("infoList", infoList); //将JavaBean转换为JSONObject或者JSONArray。 //params是Map类型的JavaBean,调用toJSON方法,将JavaBean转换为JSONObject或者JSONArray String result=JSON.toJSON(params).toString(); return new ModelAndView(new JsonView(result)); } 从github上获取FastJson的样例: (1)Group.java import java.util.ArrayList; import java.util.List; public class Group { private Long id; private String name; private List
userss = new ArrayList
(); public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List
getUserss() { return userss; } public void setUserss(List
userss) { this.userss = userss; } public void addUser(User user) { userss.add(user); } } (2)User.java public class User { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } (3)Main.java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; public class Main { public static void main(String[] args) { Group group = new Group(); group.setId(0L); group.setName("admin"); User guestUser = new User(); guestUser.setId(2L); guestUser.setName("guest"); User rootUser = new User(); rootUser.setId(3L); rootUser.setName("root"); group.addUser(guestUser); group.addUser(rootUser); String jsonString = JSON.toJSONString(group); System.out.println(jsonString); } } 得到结果: {"id":0,"name":"admin","userss":[{"id":2,"name":"guest"},{"id":3,"name":"root"}]} FastJson最主要的API是序列化JSON.toJSONString 和反序列化parseObject 一: 标准的JSON是使用双引号的,javascript支持使用单引号格式的json文本,fastjson也支持这个特性.如下: String jsonString = JSON.toJSONString(group, SerializerFeature.UseSingleQuotes); 得到结果: {'id':0,'name':'admin','userss':[{'id':2,'name':'guest'},{'id':3,'name':'root'}]} 二: 日期格式化: FastJson直接支持日期类型数据的格式化,包括java.util.Date、java.sql.Date、java.sql.Timestamp、java.sql.Time 缺省情况下,fastjson将Date类型序列化为long,例如: System.out.println(jsonString); long millis = 1324138987429L; Date date = new Date(millis); System.out.println(JSON.toJSONString(date)); 结果是: 1324138987429 三: FastJson格式化日期的方式,如下: System.out.println(JSON.toJSONString(date,SerializerFeature.WriteDateUseDateFormat)); 结果是: "2011-12-18 00:23:07" 指定输出日期的格式,毫秒级: System.out.println(JSON.toJSONStringWithDateFormat(date,"yyyy-MM-dd HH:mm:ss.SSS")); 结果是: "2011-12-18 00:23:07.429" 四: 使用WriteClassName特性,序列化时写入类型信息 String text = JSON.toJSONString(group, SerializerFeature.WriteClassName); System.out.println(text); 结果是: {"@type":"Group","id":0,"name":"admin","userss":[{"id":2,"name":"guest"},{"id":3,"name":"root"}]} 五: 使用@JSONField定制序列化输出,例如: 希望序列化采用之后采用"ID",而不是"id",你可以使用@JSONField这个Annotation public class User { @JSONField(name="ID") private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 结果是: {'id':0,'name':'admin','userss':[{'ID':2,'name':'guest'},{'ID':3,'name':'root'}]} 六: 反序列化:是把JSON格式的文本转化为JavaBean对象 指定class信息反序列化 Group parseObject = JSON.parseObject(text,Group.class); System.out.println(parseObject); 结果是: Group@79f9805f 七: 集合的反序列化:类似parseObject,使用的是parseArray String text = [{ ... }, { ... }]; List
users = JSON.parseArray(text, User.class); 八: 泛型的反序列化:如果需要返回一个带泛型的对象,例如List
、Map
,可以使用TypeReference来传入类型信息 String text = {"name":{"name":"ljw",age:18}}; Map
userMap = JSON.parseObject(text, new TypeReference
>() {});