Fastjson简单使用方法

package Demo;
 
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Vector;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
 
import entity.Userinfo;
 
/**
 * fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。 主要特点:
 * 1.快速FAST(比其它任何基于Java的解析器和生成器更快,包括jackson) 强大(支持普通JDK类包括任意Java Bean
 * 2.Class、Collection、Map、Date或enum) 零依赖(没有依赖其它任何类库除了JDK)
 *
 */
public class TestFastJson {
 
  public static void main(String[] args) {
    String json = "{\"name\":\"chenggang\",\"age\":24}";
    String arrayAyy = "[[\'马云',50],null,[\'马化腾',30]]";
//    Entity2json("zhangsan", 24);
//    list2Json();
    Complexdata();
//    Deserialization(json);
//    DateFormate(new Date());
//    Json2Eetity(json);
//    String2JSONArray(arrayAyy);
  }
 
  // 实体转为Json
  public static void Entity2json(String name, int age) {
    Userinfo info = new Userinfo(name, age);
    String str_json = JSON.toJSONString(info); //
    System.out.println("实体转化为Json" + str_json);
  }
 
  // list转Json
  public static void list2Json() {
    List<Userinfo> list = new ArrayList<Userinfo>();
    Userinfo userinfo1 = new Userinfo("lisi", 15);
    Userinfo userinfo2 = new Userinfo("wangwu", 16);
    list.add(userinfo1);
    list.add(userinfo2);
    String json = JSON.toJSONString(list, true);
    System.out.println("List集合转json格式字符串 :" + json);
  }
 
  // 字符数组转化为JSon
  private static void String2JSONArray(String arrayAyy) {
    JSONArray array = JSONArray.parseArray(arrayAyy);
    System.out.println("数组:" + array);
    System.out.println("数组长度: " + array.size());
    Collection nuCon = new Vector();
    nuCon.add(null);
    array.removeAll(nuCon);
    System.out.println("数组:" + array);
    System.out.println("数组长度: " + array.size());
  }
 
  // 复杂数据类型
  public static void Complexdata() {
    HashMap<String, Object> map = new HashMap<String, Object>();
    map.put("username", "zhangsan");
    map.put("age", 24);
    map.put("sex", "男");
 
    // map集合
    HashMap<String, Object> temp = new HashMap<String, Object>();
    temp.put("name", "xiaohong");
    temp.put("age", "23");
    map.put("girlInfo", temp);
 
    // list集合
    List<String> list = new ArrayList<String>();
    list.add("爬山");
    list.add("骑车");
    list.add("旅游");
    map.put("hobby", list);
    String jsonString = JSON.toJSONString(map);
    System.out.println("复杂数据类型:" + jsonString);
  }
 
  public static void Deserialization(String json) {
    Userinfo userInfo = JSON.parseObject(json, Userinfo.class);
    System.out.println("姓名是:" + userInfo.getName() + ", 年龄是:"
        + userInfo.getAge());
  }
 
  // 格式话日期
  public static void DateFormate(Date date) {
    System.out.println("输出毫秒值:" + JSON.toJSONString(date));
    System.out.println("默认格式为:"
        + JSON.toJSONString(date,
            SerializerFeature.WriteDateUseDateFormat));
    System.out.println("自定义日期:"
        + JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd",
            SerializerFeature.WriteDateUseDateFormat));
  }
 
  // Json转为实体
  private static void Json2Eetity(String json) {
    Userinfo userInfo = JSON.parseObject(json, Userinfo.class);
    System.out.println("输出对象的地址:" + userInfo.toString());
    System.out.println("输出对象的名字:" + userInfo.getName());
  }
}

一、简单数据的序列化

复制代码
pubic class UserInfo implements Serializable{
 private String name;
 private int age;
 public void setName(String name){
  this.name=name;
 }
 public String getName(){
  return name;
 }
 
 public void setAge(int age){
  this.age=age;
 }
 public int getAge(){
  return age;
 }
} 

public class TestOne{
 
 public static void main(String[] args){
  UserInfo info=new UserInfo();
  info.setName("zhangsan");
  info.setAge(24);
  //将对象转换为JSON字符串
  String strJson=JSON.toJSONString(info);
  System.out.println("JSON="+strJson);
 }

}
复制代码

说明:

  1. 关键部分就是上述部分的JSON.toJSONString();
  2. JSON序列化,默认序列化出的JSON字符串中键值对是使用双引号,如果需要单引号的JSON字符串,[eg:String jsonString = JSON.toJSONString(map,   SerializerFeature.UseSingleQuotes);] fastjson序列化时可以选择的SerializerFeature有十几个属性,你可以按照自己的需要去选择使用。  

二、反序列化

复制代码
public void test3(){

 String json="{\"name\":\"chenggang\",\"age\":24}";
 //反序列化
 UserInfo userInfo=JSON.parseObject(json,UserInfo.class);
 System.out.println("name:"+userInfo.getName()+", age:"+userInfo.getAge());
 
}
/**泛型的反序列化*/
public static void test4(){
  String json="{\"user\":{\"name\":\"zhangsan\",\"age\":25}}";
  Map<String, UserInfoBean> map = JSON.parseObject(json, new TypeReference<Map<String, UserInfoBean>>(){});
  System.out.println(map.get("user"));
 }
复制代码

三、日期格式化

复制代码
public void test5(){

  Date date=new Date();  
  //输出毫秒值
  System.out.println(JSON.toJSONString(date));
  //默认格式为yyyy-MM-dd HH:mm:ss  
  System.out.println(JSON.toJSONString(date, SerializerFeature.WriteDateUseDateFormat));
  //根据自定义格式输出日期 
  System.out.println(JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd", SerializerFeature.WriteDateUseDateFormat));

}
复制代码

说明:

阿里巴巴提供了很多SerializerFeature.XXX 这些都很符合中国人的习惯。比起Jackson各有优劣!

四、基本常用API

复制代码
 Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在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> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean 
//  public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray 
//  public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合 
//  public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本 
//  public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本 
//  public static final Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray(和上面方法的区别是返回值是不一样的)
复制代码

 

JackSon下载:http://repo1.maven.org/maven2/com/alibaba/fastjson/ 与   https://yunpan.cn/cu2iEKCZjXfak  访问密码 8291

posted on 2017-11-23 16:23  admingy  阅读(350)  评论(0)    收藏  举报

导航