Android网络数据解析之Jackson
一、Jackson
Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json和xml转换成Java对象。相对Gson和FastJson在大数据解析的情况下,Jack占据相当大优势。
Jackson个人理解是以流的方式对数据进行处理,使得它的处理数据速度相对较快。但是这样就需要完全解析文档,如果要按需解析的话,可以拆分Json来读取,这样操作和解析的方法就显得复杂。
二、使用场景
适用于需要处理超大型JSON文档、不需要对JSON文档进行按需解析、性能要求较高的场合。
三、对比
相比较Gson、FastJson、Jackson。推荐FastJson,简单易懂。如果有特殊类型Json化需求或复杂结构选择Gson。如果不需要对Json文档进行按需解析选择Jackson。
1. 比较来说,Gson比FastJson考虑更全面,对用URL\UUID\BIT_SET\CALENDAR等都有特定的输出规则。
2. 小数据调用Gson比FastJson快一点。大数据调用FastJson比Gson快。
3. 可阅读性FastJson比Gson好。
四、简单实例
第一步:下载Jackson的jar包:
1、官网下载对应jar包
2、文章对应jar包 http://download.csdn.net/download/binjianliu/9976820
第二步:将jar包导入项目(复制到studio的libs文件夹中,同步项目)
第三步:创建ObjectMapper对象的单例
public class JacksonMapper { private static final ObjectMapper mapper = new ObjectMapper(); private JacksonMapper(){} public static ObjectMapper getInstance(){ return mapper; } } |
第四步:创建工具类JsonUtil.java
public class JsonUtil { /** * 生成Json数据 * @param object 数据对象 * @return Json数据 */ public static String getJsonString(Object object)throws Exception{ return JacksonMapper.getInstance().writeValueAsString(object); } /** * 解析Json数据 * @param jsonStr Json数据 * @param cls 解析对象 * @return */ public static Object toObject(String jsonStr,Class cls)throws Exception{ ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.readValue(jsonStr,cls); } } |
第五步:创建测试对象 TestPerson.java
public class TestPerson { private String name; private int age; public TestPerson(){} public TestPerson(String name, int age) { this.name = name; this.age = 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; } } |
第六步:生成和解析Json数据
//单一对象生成JSON TestPerson test = new TestPerson("张三",20); try { String str2Json = JsonUtil.getJsonString(test); Log.e("LKing","str2Json = "+str2Json); //结果: {"age":20,"name":"张三"} } catch (Exception e) { e.printStackTrace(); } //集合对象生成JSON TestPerson testFirst = new TestPerson("张三",20); TestPerson testSecond = new TestPerson("李四",30); TestPerson testThird = new TestPerson("王五",40); ArrayList<TestPerson> testPersons = new ArrayList<TestPerson>(); testPersons.add(testFirst); testPersons.add(testSecond); testPersons.add(testThird); String listJson = null; try { String str2Json = JsonUtil.getJsonString(testPersons); listJson = str2Json; Log.e("LKing","str2Json = "+str2Json); //结果: [{"age":20,"name":"张三"},{"age":30,"name":"李四"},{"age":40,"name":"王五"}] } catch (Exception e) { e.printStackTrace(); } //单一对象解析JSON String json2Str = "{\"name\":\"张三\",\"age\":20}"; try { TestPerson testPerson = (TestPerson)JsonUtil.toObject(json2Str,TestPerson.class); Log.e("LKing","str2Json_name = "+testPerson.getName());//结果:张三 Log.e("LKing","str2Json_age = "+testPerson.getAge());//结果:20 } catch (Exception e) { e.printStackTrace(); } //集合对象解析JSON ObjectMapper objectMapper = JacksonMapper.getInstance(); try { @SuppressWarnings("unchecked") ArrayList<TestPerson> arrayList = objectMapper.readValue(listJson, new ArrayList<TestPerson>().getClass()); TestPerson tt = new TestPerson("aaa",20); Log.e("LKing","tt= "+String.valueOf(tt)); ArrayList<TestPerson> list = (ArrayList<TestPerson>) JsonUtil.toObject(listJson,new ArrayList<TestPerson>().getClass()); Log.e("LKing","list = "+list.toString()); //结果:[{age=20, name=张三}, {age=30, name=李四}, {age=40, name=王五}] } catch (Exception e) { e.printStackTrace(); } |