Android网络数据解析之Jackson

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值