您的位置 首页 java

Fastjson序列化与反序列化JAVA五种常用对象

1.Fastjson简介

Fastjson是阿里巴巴的开源JSON解析库,支持任何 JAVA 对象与JSON格式的序列化与反序列化;

序列化:JAVA对象转换为JSON字符串;反序列化:JSON字符串转换为JAVA对象;

提供服务器端、安卓客户端两种解析工具,性能表现较好;

允许转换预先存在的无法修改的对象(只有class、无源代码);

Java泛型的广泛支持;允许对象的自定义表示、允许自定义序列化类;

支持任意复杂对象(具有深厚的继承层次和广泛使用的泛型类型);

Fastjson 官方源码地址:

2.下载使用

Maven中央仓库下载最新版本:

   

或者配置maven坐标依赖:

 <dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>fastjson</artifactId>
  <version>1.2.75</version>
</dependency>  

3.自定义类User.java

 package raky.train.entity;
public class User {
  private  Integer  id;
  private String name;
  private String pass;
  private Integer age;
  public User() {
  }
  public User(Integer id, String name, String pass, Integer age) {
    super();
    this.id = id;
    this.name = name;
    this.pass = pass;
    this.age = age;
  }
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getPass() {
    return pass;
  }
  public void setPass(String pass) {
    this.pass = pass;
  }
  public Integer getAge() {
    return age;
  }
  public void setAge(Integer age) {
    this.age = age;
  }
  @Override
  public String toString() {
    return "User [id=" + id + ", name=" + name + ", pass=" + pass + ", age=" + age + "]";
  }
}  

4.序列化为JSON字符串

以下针对Java五种常用对象:JavaBean,Array,List,Set和Map序列化为JSON字符串。

4.1 自定义JavaBean对象序列化为JSON字符串:

 /**
* pojo/domain/entity ==> json
* <p>Title: bean2Json</p>  
* <p>Description: </p>
*/
public static void bean2Json(){
  User user = new User(1001,"jack","jack",18);
  String jsonString = JSON.toJSONString(user);
  logger.info(jsonFormatter(jsonString,"bean"));
}  

4.2 Array/List/Set/Map容器对象序列化为JSON字符串:

 /**
* array/list/set/map ==> json
* <p>Title: collection2Json</p>  
* <p>Description: </p>
*/
public static void collection2Json() {
  User[] array = new User[2]; //Array
  List<User> list = new ArrayList<User>(); //List
  Set<User> set = new HashSet<User>(); //Set
  Map<Integer, User> map = new HashMap<Integer, User>();//Map
  for(int i = 0; i < 2; i++) {
    array[i] = new User(i, "raky-array-" + i,"" + i, i);
    list.add(new User(i, "raky-list-" + i,"" + i, i));
    set.add(new User(i, "raky-set-" + i,"" + i, i));
    map.put(i, new User(i, "raky-map-"+i,"" + i, i));
  }	
  String arrayJsonString = JSON.toJSONString(array);
  String listJsonString = JSON.toJSONString(list);
  String setJsonString = JSON.toJSONString(set);
  String mapJsonString = JSON.toJSONString(map);

  logger.info(jsonFormatter(arrayJsonString,"array"));
  logger.info(jsonFormatter(listJsonString,"list"));
  logger.info(jsonFormatter(setJsonString,"set"));
  logger.info(jsonFormatter(mapJsonString,"bean"));		
}  

5.反序列化为Java对象

以下针对JSON字符串转换为Java五种常用对象:JavaBean,Array,List,Set和Map。

5.1 JSON字符串反序列化为自定义JavaBean对象:

 /**
* json ==> pojo/domain/entity
* <p>Title: json2Bean</p>  
* <p>Description: </p>
*/
public static void json2Bean(){
  String jsonString = "{"id":1001,"name":"jack","pass":"jack","age":18}";
  User user = JSON.parse object (jsonString, User.class);
  logger.info(user.toString());
}  

5.2 JSON字符串反序列化为Array/List/Set/Map容器对象:

 /**
* json ==> array/list/set/map
* <p>Title: json2Collection</p>  
* <p>Description: </p>
*/
public static void json2Collection() {
  String arrayJsonString = "[{"id":0,"name":"raky-array-0","pass":"0","age":0},{"id":1,"name":"raky-array-1","pass":"1","age":1}]";
  String listJsonString = "[{"id":0,"name":"raky-list-0","pass":"0","age":0},{"id":1,"name":"raky-list-1","pass":"1","age":1}]";
  String setJsonString = "[{"id":1,"name":"raky-set-1","pass":"1","age":1},{"id":0,"name":"raky-set-0","pass":"0","age":0}]";
  String mapJsonString = "{"0":{"id":0,"name":"raky-map-0","pass":"0","age":0},"1":{"id":1,"name":"raky-map-1","pass":"1","age":1}}";
  User[] array =   JSON.parseObject(arrayJsonString, User[].class);
  //		List<User> list =  JSON.parseArray(listJsonString, User.class);
  List<User> list =  JSON.parseObject(listJsonString, new TypeReference<List<User>>() {});
Set<User> set =  JSON.parseObject(setJsonString, new TypeReference<Set<User>>() {});
Map<Integer, User> map =  JSON.parseObject(mapJsonString, new TypeReference<Map<Integer, User>>() {});

Arrays.asList(array).forEach((value) -> System.out.println("array-value => " + value));
list.forEach((value) -> System.out.println("list-value => " + value));
set.forEach((value) -> System.out.println("set-value => " + value));
map.forEach((key,value) -> System.out.println("map-value => key = " + key + ", value = " + value));
}	  

6.Fastjson格式化输出

 /**
* 格式化json
* <p>Title: jsonFormatter</p>  
* <p>Description: </p>  
* @param jsonString
* @param type
* @return
*/
public static String jsonFormatter(String jsonString, String type){
  Object object = null;
  if("bean.map".contains(type)) {
    //bean/map
    JSONObject jsonObject = JSONObject.parseObject(jsonString); 
    object = jsonObject;
  }else if("array.list.set".contains(type)) {
    //array/list/set
    JSONArray jsonArray = JSONArray.parseArray(jsonString); 
    object = jsonArray;
  }
  String prettyJsonString = JSON.toJSONString(object, SerializerFeature.PrettyFormat, 
                                              SerializerFeature.WriteMapNullValue, 
                                              SerializerFeature.WriteDateUseDateFormat);
  return prettyJsonString;
}  

至此搞定,Fastjson序列化与反序列化五种常用对象就这么简单,小伙伴们不妨试试。

文章来源:智云一二三科技

文章标题:Fastjson序列化与反序列化JAVA五种常用对象

文章地址:https://www.zhihuclub.com/176058.shtml

关于作者: 智云科技

热门文章

网站地图