Jackson解析,对象转json,json转对象,map

前言以及准备工作:

当我在网上找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解析也能用上面的几种方法进行组合解析。
---------------------
作者:kumi七七
来源:CSDN
原文:https://blog.csdn.net/u012237192/article/details/53735280
版权声明:本文为博主原创文章,转载请附上博文链接!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值