Android网络数据解析之Jackson

来源:互联网 发布:淘宝卖什么容易赚钱 编辑:程序博客网 时间:2024/06/05 12:44

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数据

//单一对象生成JSONTestPerson test = new TestPerson("张三",20);try {    String str2Json = JsonUtil.getJsonString(test);    Log.e("LKing","str2Json = "+str2Json);    //结果: {"age":20,"name":"张三"}} catch (Exception e) {    e.printStackTrace();}//集合对象生成JSONTestPerson 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();}//单一对象解析JSONString 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();}//集合对象解析JSONObjectMapper 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();}

 

阅读全文
0 0