Android网络数据解析之FastJson

Android网络数据解析之FastJson

一、FastJson解析框架

FastJson是一个Java语言编写的Json处理器,由阿里巴巴公司开发。

注:FastJson对实体属性是忽略大小写的,所有使用的时候一定要注意是否忽略大小写问题。

二、FastJson详解

1. 对应当前文章的jar包:

http://download.****.net/download/binjianliu/9972794

2. 官网下载最新jar包:https://github.com/alibaba/fastjson

 Android网络数据解析之FastJson

3. 将下载下来的JAR包放入libs中,同步项目(不同步可能找不到FastJson引用)

4. FastJson中的方法说明

/** 把JSON文本parse为JSONObject或者JSONArray*/
public static final Object parse(String text);
/** 把JSON文本parse成JSONObject*/
public static final JSONObject parseObject(String text);
/** 把JSON文本parse为JavaBean*/
public static final T parseObject(String text,Class clazz);
/** 把JSON文本parse成JSONArray*/
public static final JSONArray parseArray(String text);
/** 把JSON文本parse成JavaBean集合*/
public static final List parseArray(String text,Class clazz);
/** 将JavaBean序列化为JSON文本*/
public static final String toJSONString(Object object);
/** 将JavaBean序列化为带格式的JSON文本*/
public static final String toJSONString(Object object,boolean prettyFormat);
/** 将JavaBean转换为JSONObject或者JSONArray*/
public static final Object toJSON(Object javaObject);

 

5. Json序列化和反序列化实例

实体类:TestPerson:必须有个无参构造器,否则解析直接闪退

public class TestPerson {
    private String mName;
    private int mAge;

    public TestPerson() {

    }

    public TestPerson(String name, int age) {
        mName = name;
        mAge = age;
    }

    public void setName(String name) {
        mName = name;
    }

    public String getName() {
        return mName;
    }

    public void setAge(int age) {
        mAge = age;
    }

    public int getAge() {
        return mAge;
    }

}

 

Json序列化和反序列化:

String str2Json = "{\"name\":\"张三\",\"age\":20}";
//String序列化成Json
Log.e("LKing","string-->Json = "+JSON.toJSON(str2Json));
结果:string-->Json = {"name":"张三","age":20}

String strArray2Json = "[{\"name\":\"张三\",\"age\":20},{\"name\":\"李四\",\"age\":30}]";
//String序列化成Json
Log.e("LKing","stringArray-->Json = "+JSON.toJSON(strArray2Json));
结果:stringArray-->Json = [{"name":"张三","age":20},{"name":"李四","age":30}]

List<TestPerson> list = new ArrayList<TestPerson>();
list.add(new TestPerson("张三",20));
list.add(new TestPerson("李四",30));
//集合序列化成Json
Log.e("LKing","集合-->Json = "+JSON.toJSON(list));
结果:集合-->Json = [{"age":20,"name":"张三"},{"age":30,"name":"李四"}]

TestPerson testPerson = new TestPerson("王五",40);
//对象序列化成Json
Log.e("LKing","对象-->Json = "+JSON.toJSON(testPerson));
结果:对象-->Json = {"age":40,"name":"王五"}

String str = "{\"name\":\"张三\",\"age\":20}";
//Json反序列化成对象
TestPerson person = JSON.parseObject(str,TestPerson.class);
Log.e("LKing","Json-->对象= "+"name = "+person.getName()+";age = "+person.getAge());
结果:Json-->对象= name = 张三;age =20

String strArray = "[{\"name\":\"张三\",\"age\":20},{\"name\":\"李四\",\"age\":30}]";
//数组对象反序列化成集合
List<TestPerson> personList = JSON.parseArray(strArray,TestPerson.class);
for (TestPerson item : personList) {
    Log.e("LKing","Json数组-->对象= "+item.getName()+item.getAge());
}
结果:Json数组-->对象= 张三20
     Json数组-->对象= 李四30

//直接解析Json对象,但是要使用FastJson解析,JSONObject就要引用FastJson包下的JSONObject:import com.alibaba.fastjson.JSONObject;
JSONObject obj = JSON.parseObject("{\"name\":\"张三\",\"age\":20}");
Log.e("LKing","FastJsonString = "+obj.getString("name"));
Log.e("LKing","FastJsonBigInteger = "+obj.getBigInteger("age"));
Log.e("LKing","FastJsonInteger = "+obj.getInteger("age"));
结果:FastJsonString =张三
     FastJsonBigInteger =20
     FastJsonInteger =20

//直接解析Json数组
JSONArray jsonArray = JSON.parseArray("[{\"name\":\"张三\",\"age\":20},{\"name\":\"李四\",\"age\":30}]");
for (int i=0;i<jsonArray.size();i++){
    JSONObject jsonObject = jsonArray.getJSONObject(i);
    Log.e("LKing","FastJsonString = "+jsonObject.getString("name"));
    Log.e("LKing","FastJsonBigInteger = "+jsonObject.getBigInteger("age"));
}
结果:FastJsonString =张三
     FastJsonBigInteger =20
     FastJsonString =李四
     FastJsonBigInteger =30

//Json数组直接转成String
JSONArray jsonArrayString = JSON.parseArray("[{\"name\":\"张三\",\"age\":20},{\"name\":\"李四\",\"age\":30}]");
for (Object object : jsonArrayString) {
    Log.e("LKing","FastJsontoString = "+object.toString());
}
结果:FastJsontoString = {"age":20,"name":"张三"}
     FastJsontoString = {"age":30,"name":"李四"}

注:当然可以直接使用FastJson中的方法序列化和反序列化,也可以封装起来使用

/**
 * 对象转化为json fastjson 使用方式
 */
public static String objectToJsonForFastJson(Object object) throws Exception {
    if (object == null) {
        return "";
    }
    try {
        return JSON.toJSONString(object);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

/**
 * json转化为对象  fastjson使用方式
 */
public static <T> T jsonToObjectForFastJson(String jsonData, Class<T> clazz) {
    if (TextUtils.isEmpty(jsonData)) {
        return null;
    }
    try {
        return parseObject(jsonData, clazz);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * json转化为List  fastjson使用方式
 */
public static List jsonToListForFastJson(String jsonData) {
    if (TextUtils.isEmpty(jsonData)) {
        return null;
    }
    List arrayList = null;
    try {
        arrayList = parseObject(jsonData, new TypeReference<ArrayList>() {
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
    return arrayList;
}

/**
 * json转化为Map  fastjson使用方式
 */
public static Map jsonToMapForFastJson(String jsonData) {
    if (TextUtils.isEmpty(jsonData)) {
        return null;
    }
    Map map = null;
    try {
        map = parseObject(jsonData, new TypeReference<Map>() {
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
    return map;
}