Android-第三方框架-json解析(FastJson,GJson)

简介

目前,服务器数据请求大多以json格式返回,android2.3提供的json解析类 JSONObject。但是这个需要自己封装一个json解析类。同时目前主流框架选择:
google的Gson 和阿里巴巴的FastJson。

FastJson

compile 'com.alibaba:fastjson:1.2.22'

下载地址http://repo1.maven.org/maven2/com/alibaba/fastjson/1.2.14/

FastJson常用的序列化操作都可以在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。

示例

json数据1 - data: {"status":1,"data":"","messages":"验证成功"}


JSONObject jsonObject = JSONObject.parseObject(data);
String message = jsonObject.getString("messages");
**json数据2 - data:** 
{
    "now": {
        "englishName": "Sunny/Clear",
        "imgUrl": "http://10.60.62.118:8090/parkinglot//images/cond_icon/100.png",
        "fl": "36",
        "name": "晴",
        "code": 100
    },
    "aqi": {
        "pm10": "72",
        "pm25": "43",
        "qlty": "轻度污染"
    },
    "vehicle_restriction": {}
}



**新建Bean对象**

public class WeatherBean {

    private Aqi aqi;
    private Now now;
    private Vehicle vehicle_restriction;

    public Aqi getAqi() {
        return aqi;
    }

    public void setAqi(Aqi aqi) {
        this.aqi = aqi;
    }

    public Now getNow() {
        return now;
    }

    public void setNow(Now now) {
        this.now = now;
    }

    public Vehicle getVehicle_restriction() {
        return vehicle_restriction;
    }

    public void setVehicle_restriction(Vehicle vehicle_restriction) {
        this.vehicle_restriction = vehicle_restriction;
    }


    public class Aqi{
        public String pm10;
        public String pm25;
        public String qlty;

    }

    public class Now{
        public String code;
        public String name;
        public String englishName;
        public String imgUrl;
        public String fl;
    }

    public class Vehicle{
        public String number;
        public String area;
    }
 }


**数据转换**

WeatherBean weath = JSONObject.parseObject(resultData,WeatherBean.class);

其他的就不一一说明,需要的自己尝试或度娘。

注:经验得出:fastjson的key不区分大小的。
例如:private Aqi aqi;写成private Aqi AQI;也可以解析出来

错误及解决

  • 错误1:JSONObject parseObject解析错误

    com.alibaba.fastjson.JSONException: syntax error, expect {, actual [, pos 0

    原因:
    1:http请求方式错误。Get请求写成了Post请求。
    2:bean里内嵌了一个bean变量。,转换有时会有问题。
    3:返回是List,调用错误。

    解决:
    JSONObject parseObject 改 JSONObject.parseArray(个人尝试)

Gson

Gson由谷歌研发,可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。

compile 'com.google.code.gson:gson:2.4'

下载,http://search.maven.org/#search%7Cga%7C1%7Ccom.google.code.gson

toJson()方法

用于将Java对象转换为相应的JSON数据,主要有以下几种形式:

  1. String toJson(JsonElement jsonElement); //JsonObject、JsonArray等转换成JSON数据
  2. String toJson(Object src);//用于将指定的Object对象序列化成相应的JSON数据
  3. String toJson(Object src, Type typeOfSrc);//用于将指定的Object对象(可以包括泛型类型)序列化成相应的JSON数据

fromJson()方法
用于将JSON数据转换为相应的Java对象,主要有以下几种形式:

  1. T fromJson(JsonElement json, Class classOfT);
  2. T fromJson(JsonElement json, Type typeOfT);
  3. T fromJson(JsonReader reader, Type typeOfT);
  4. T fromJson(Reader reader, Class classOfT);
  5. T fromJson(Reader reader, Type typeOfT);
  6. T fromJson(String json, Class classOfT);
  7. T fromJson(String json, Type typeOfT);

以上的方法用于将不同形式的JSON数据解析成Java对象。

注意:如果你的Json里面不止一个对象,那么你就得使用一个集合来装,我们这里模拟一个list来装的例子,在使用list装的过程中我们会使用到一个工具类,typeToken,通过它我们可以获取一个泛型的数据类型,使用方法十分简单,TypeToken(泛型)(){}.gettype()即可,返回一个type类型,这就是fromjson所需要的type类型,


**json数据**  
String s="[{name:'zhangsan',age:12},{name:'lisi',age:12}]";

**bean对象**
public class user {
    private String name;
    private int age;
    .....
}

**json转换**
new Gson().fromJson(jsonString, new TypeToken>(){}.getType());

你可能感兴趣的:(Android—第三方框架)