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
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; } |