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();}
- Android网络数据解析之Jackson
- Jackson解析JSON数据
- Android 网络获取数据之XML解析
- Android 网络获取数据之Json解析
- Android网络数据解析之FastJson
- Android网络数据解析之Gson
- Android网络数据解析之Jsoup
- Jackson 解析json数据之忽略解析字段注解@JsonIgnoreProperties
- Jackson 解析j@JsonIgnorePropertiesson数据之忽略解析字段注解
- Jackson 解析json数据之忽略解析字段注解@JsonIgnoreProperties
- Jackson 解析json数据之忽略解析字段注解@JsonIgnoreProperties
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android网络之数据解析----SAX方式解析XML数据
- Android中级之网络数据解析一之Json解析
- 为什么Mac用户都会选择这款PDF阅读编辑器
- Libpcap库编程指南--分析数据包
- 人群场景的属性--Deeply Learned Attributes for Crowded Scene Understandin
- layerui代码控制tab选项卡,添加,关闭
- 诸多设计模式中,最为常见的三种设计模式-单例模式,代理模式,工厂模式
- Android网络数据解析之Jackson
- WINCE4.2+sqlce1.0程序移植到WINCE5.0中的过程记录
- Ajax请求session超时解决办法
- 理解COM和DLL技术
- 一次简单的代码封装经历
- leetcode 14. Longest Common Prefix
- keepalived+haproxy 安装 PXC高可用
- Vue之使用脚手架搭建Vue工程
- centos6.3下安装loadrunner 11的负载端LoadGenerator实战