android jackson解析,对象转json,json转对象,map...
来源:互联网 发布:打谱软件哪个好索呢 编辑:程序博客网 时间:2024/04/30 15:57
题外话:以前一直用的Gson,后来发现Jackson的确要比Gson快,现在估计很长一段时间都要用jackson了。
前言以及准备工作:
当我在网上找Jackson的依赖包的时候,看到很多文章都是复制过来复制过去的,里面给的依赖包只有核心包jackson-core-2.x.x,然而代码里面却需要用到jackson-databind-2.x.x里面的东西,比如里面有一个ObjectMapper类,只有后者的依赖包里面才有,所以说,请那些抄博客的人能够copy得有水平一些吗,最基本的依赖包都不讲清楚。当然最好的方法还是学好英语,直接看官方的说明
所以我这里直接直接给出所有jar包的下载地址:http://repo1.maven.org/maven2/com/fasterxml/jackson/
jar包在core文件夹里面,三个版本都下载,并放到AndoidStudio的libs文件夹里面依赖,我这里用的是2.8.5版本:jackson-annotations-2.8.5,jackson-core-2.8.5,jackson-databind-2.8.5。
然后,当你依赖了这三个jar包之后,写好代码运行的时候,十有八九会抛出DuplicateFileException 这个异常,应该是属于文件冲突,有重复的文件之类的,我也没去仔细研究过,解决方法就是:在build.gradle文件的android{}里面添加以下代码
packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/LICENSE' exclude 'META-INF/DEPENDENCIES' exclude 'META-INF/notice.txt' exclude 'META-INF/license.txt' exclude 'META-INF/dependencies.txt' exclude 'META-INF/LGPL2.1' }
jackson的使用
在这里我只介绍几种常用的方法,如果有更多需求请自行研究
1、java对象转json
Student类:
public class Student { private String name; private String birthDay; private String gender; public Student(String name, String birthDay, String gender) { this.name = name; this.birthDay = birthDay; this.gender = gender; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getBirthDay() { return birthDay; } public void setBirthDay(String birthDay) { this.birthDay = birthDay; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
代码:
private void objectToJson() { Student student = new Student("小智", "2006-12-12", "男"); //ObjectMapper:操作json的核心类 ObjectMapper mapper = new ObjectMapper(); String studentJson = null; try { //将java对象转换成json字符串 studentJson = mapper.writeValueAsString(student); } catch (JsonProcessingException e) { e.printStackTrace(); } Log.e("student", studentJson); }
打印结果:
student: {"birthDay":"2006-12-12","gender":"男","name":"小智"}
2、List/Map集合转换json
代码:
private void listToJson() { List<Student> list = new ArrayList<>(); list.add(new Student("小智", "2006-12-12", "男")); list.add(new Student("小刚", "2001-7-13", "男")); list.add(new Student("小霞", "2006-9-2", "女")); ObjectMapper mapper = new ObjectMapper(); String studentList = null; try { studentList = mapper.writeValueAsString(list); } catch (JsonProcessingException e) { e.printStackTrace(); } Log.e("list", studentList); } private void mapToJson() { Map<String, String> map = new HashMap<>(); map.put("game", "pokemon"); map.put("indie_game", "FireWatch"); map.put("Blizzard", "OverWatch"); ObjectMapper mapper = new ObjectMapper(); String gameMap = null; try { gameMap = mapper.writeValueAsString(map); } catch (JsonProcessingException e) { e.printStackTrace(); } Log.e("gameMap", gameMap); }
打印结果:
list: [{"birthDay":"2006-12-12","gender":"男","name":"小智"},{"birthDay":"2001-7-13","gender":"男","name":"小刚"},{"birthDay":"2006-9-2","gender":"女","name":"小霞"}]gameMap: {"game":"pokemon","Blizzard":"OverWatch","indie_game":"FireWatch"}
3、json转换java对象
代码:
private void jsonToObject() { String student = "{\"birthDay\":\"2006-12-12\",\"gender\":\"男\",\"name\":\"小智\"}"; ObjectMapper mapper = new ObjectMapper(); Student student1 = null; try { student1 = mapper.readValue(student, Student.class); } catch (IOException e) { e.printStackTrace(); } Log.e("student1", student1.getBirthDay()); }
打印结果:
student1: 2006-12-12
4、将json字符串转换成List集合
代码:
private void jsonToList() { String studentList = "[{\"birthDay\":\"2006-12-12\",\"gender\":\"男\",\"name\":\"小智\"},{\"birthDay\":\"2001-7-13\",\"gender\":\"男\",\"name\":\"小刚\"}, {\"birthDay\":\"2006-9-2\",\"gender\":\"女\",\"name\":\"小霞\"}]"; ObjectMapper mapper = new ObjectMapper(); List<Student> list = null; //先要先反序列化复杂类型 //利用ObjectMapper的getTypeFactory().constructParametricType(Class<?> parametrized, Class<?>... parameterClasses)方法 //获取泛型容器(比如List/Map)的type JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, Student.class); try { //再将这个type作为转换的目标type list = mapper.readValue(studentList,javaType); } catch (IOException e) { e.printStackTrace(); } Log.e("list", list.get(1).getBirthDay()); }
附上constructParametricType(Class<?> parametrized, Class<?>... parameterClasses)方法的源码
其中parametrized是指你转换的Collection类型,比如List,然后parameterClasses是指参数类型的数组,比如这里的Student
打印结果:
list: 2001-7-13
5、将json字符串转换成Map集合
代码:
private void jsonToMap() { String mapString = "{\"birthDay\":\"2006-12-12\",\"gender\":\"男\",\"name\":\"小智\"}"; ObjectMapper mapper = new ObjectMapper(); Map<String, Object> map = null; //和List一样,Map依旧需要反序列化 JavaType javaType = mapper.getTypeFactory().constructParametricType(HashMap.class, String.class, Object.class); try { //JSONObject jsonObject = new JSONObject(messageMap); map = mapper.readValue(mapString, javaType); } catch (IOException e) { e.printStackTrace(); } if (map != null) { Log.e("map", map.toString()); } }打印结果:
map: {name=小智, birthDay=2006-12-12, gender=男}
以上则是我认为比较常用的一些解析,更复杂的json解析也能用上面的几种方法进行组合解析。
- android jackson解析,对象转json,json转对象,map...
- Jackson 将Map对象转换成JSON
- jackson json 转list/map
- map转json,json转对象
- jackson处理json对象
- go 对象json转map
- 复杂json转MAP对象
- List<Map>转JSON对象
- Java-json对象转Map
- JSON解析类库之Jackson(1) --- Jackson类库学习, 生成与解析json数据,json字符串与Java对象互转
- android json解析对象
- jackson简单使用,对象转json,json转对象,json转list
- jackson json字符串、map、java对象的转换例子
- 使用Jackson将JSON字符串转换为MAP对象
- 用jackson包实现json、对象、Map之间的转换
- Jackson实现Object对象与Json字符串的互转
- Jackson实现Object对象与Json字符串的互转
- Jackson实现Object对象与Json字符串的互转
- 读取数据库中数据,在页面上直接显示图片(点击该图片变大)
- CS231 Lecture 1: Introduction
- Spark特点
- unity在移动设备上打开相机
- java中格式化数字的类DecimalFormat
- android jackson解析,对象转json,json转对象,map...
- python多线程编程(2): 线程的创建、启动、挂起和退出
- day14
- C++11多线程std::thread的简单使用
- iOS 保持界面流畅的技巧
- 自己动手写操作系统学习笔记(一)
- Android上实现一个简单的天气预报APP(六) 更新界面数据
- Java String
- Unity实战 RTS3D即时战略游戏开发(十) AiController