Json解析包FastJson使用

阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:
速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson;
功能强大,完全支持Java Bean、集合、Map、日期、Enum,支持范型,支持自省;无依赖,能够直接运行在Java SE 5.0以上版本;支持Android;开源 (Apache 2.0)

源码地址:https://github.com/alibaba/fastjson


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 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集合 
*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
 
简单的测试应用如下:
1.TestPerson.java
package com.pers.fastjson;

public class TestPerson {
    private int age;
    private String name;

    public TestPerson() {

    }

    public TestPerson(int age, String name) {
        this.age = age;
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

2.TestFastJson.java

package com.pers.fastjson;

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;//阿里巴巴FastJson是一个Josn处理工具包 包括序列化和反序列化 两部分
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

public final class TestFastJson {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        TestPerson json = new TestPerson(19,"hoobey");
        ArrayList<TestPerson> list = new ArrayList<TestPerson>();
        list.add(json);
        list.add(new TestPerson(12,"小米"));
        //将集合或者对象序列化为JSON
        System.out.println(JSON.toJSON(json));//{"name":"hoobey","age":19}
        System.out.println(JSON.toJSON(list));//[{"name":"hoobey","age":19},{"name":"小米","age":12}]
    
    
        //Json串反序列化成对象                      // 把JSON文本parse成JSONObject 
        TestPerson person = JSON.parseObject("{\"name\":\"李明\",\"age\":19}", TestPerson.class);
        //name:李明,age:19 
        System.out.printf("name:%s,age:%d\n",person.getName(),person.getAge());
        
         
        String str = "[{\"name\":\"李明\",\"age\":19},{\"name\":\"张三\",\"age\":12}]";
        //数组对象反序列化成集合                                                  //把JSON文本parse成JavaBean集合
        List<TestPerson> listPerson = JSON.parseArray(str,TestPerson.class);
         
        for(TestPerson item : listPerson){
            System.out.println( item.getName());//李明     张三
            System.out.println( item.getAge());// 19  12
        }
        
        //没有对象直接解析JSON对象        parseObject(String text); // 把JSON文本parse成JSONObject  
        JSONObject jobj = JSON.parseObject("{\"name\":\"李明\",\"age\":19}");
        //name:李明,age:19
        System.out.printf("name:%s,age:%d\n",jobj.getString("name"),jobj.getBigInteger("age"));
       
        
        
        System.out.println("------------------------------");  
        //没有对象直接解析JSON数组
        JSONArray jarr = JSON.parseArray("[{\"name\":\"李明\",\"age\":19},{\"name\":\"张三\",\"age\":12}]");
         /*
          * name:李明,age:19
            name:张三,age:12
          */
        for(int i=0,len=jarr.size();i<len;i++){
            JSONObject temp=  jarr.getJSONObject(i);
            System.out.printf("name:%s,age:%d\n",temp.getString("name"),temp.getBigInteger("age"));
        }
/*
 *             {"name":"李明","age":19}
            {"name":"张三","age":12}         
 */
        for(Object obj:jarr){
            System.out.println(obj.toString());
        }
         
    }
 
}

 关于System.out.printf("你好,%s,下年 ,你将会,%f",name,age)的说明:

package com.pers.fastjson;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String name="hoobey";
        double age = 24.00;
        int age2 = 24;
        //你好,hoobey,下年 ,你将会,24 岁
        System.out.printf("你好,%s,下年 ,你将会,%f",name,age);
        System.out.println();
        System.out.printf("你好,%s,下年 ,你将会,%d",name,age2);
        /*
         * 解释:每一个以%开头的格式说明符都用后面给定的相应的参数替换,格式说明符尾部的转会符
                            将指示被格式化的数值类型:
                            其中:
                            f 表示浮点数;
                            s表示字符串;
                            d表示十进制数;
         */
    }

}

 

posted @ 2017-11-14 15:30  starskyhu  阅读(782)  评论(0编辑  收藏  举报