Java对象与Json对象的相互转化之Jackson实现方式

  平常应用之间传输信息,一般用的json,这就需要将Java对象转化为json来进行传输,,而且目前有很多转化为json的方式,这里暂且总结一下各种转化为json的方式,方便后期用到的话直接拿过来就可以了。

  1.使用Jackson方式
  这里使用的是Maven来创建工程,针对Jackson使用下面这些依赖即可,如果是创建普通的Java工程,那么就需要这三个Jar包
  

 <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.8.6</version>
</dependency>
   <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.7</version>
</dependency>

这里写图片描述

  接下里是代码,因为一般传输的对象不止一个,所以这里创建多个对象存入List实现,首先创建一个简单的Java Bean对象
  

public class Person {
        private String name;  
        private int age;  
        private boolean sex;  
        private Date birthday;  
        private String word;  
        private double salary;  

        public String getName() {  
            return name;  
        }  

        public void setName(String name) {  
            this.name = name;  
        }  

        public int getAge() {  
            return age;  
        }  

        public void setAge(int age) {  
            this.age = age;  
        }  

        public boolean isSex() {  
            return sex;  
        }  

        public void setSex(boolean sex) {  
            this.sex = sex;  
        }  

        public Date getBirthday() {  
            return birthday;  
        }  


        public void setBirthday(Date birthday) {  
            this.birthday = birthday;  
        }  

        public String getWord() {  
            return word;  
        }  

        public void setWord(String word) {  
            this.word = word;  
        }  


        public double getSalary() {  
            return salary;  
        }  

        public void setSalary(double salary) {  
            this.salary = salary;  
        }  

        public Person(String name, int age) {  
            this.name = name;  
            this.age = age;  
        }  

        public Person(String name, int age, boolean sex, Date birthday,  
                String word, double salary) {  
            super();  
            this.name = name;  
            this.age = age;  
            this.sex = sex;  
            this.birthday = birthday;  
            this.word = word;  
            this.salary = salary;  
        }  

        public Person() {  
        }  

        @Override  
        public String toString() {  
            return "Person [name=" + name + ", age=" + age + ", sex=" + sex  
                    + ", birthday=" + birthday + ", word=" + word + ", salary="  
                    + salary + "]";  
        }  
}

  接下来写一个小demo,创建一系列Java对象,将其转化为json字符串存在本地的后缀为json的文件中,后期如果需要可以直接从本地文件粘贴json字符串。另外一个方法是从本地读取json文件,将其输出到控制台,代码很简单,直接贴一下
  

public class Demo {
    public static  List<Person> list;
       public static void main(String[] args) {  

            writeJsonObject();  

            readJsonObject();  
        }  

        // 直接写入一个对象(所谓序列化),这里是将单个对象写入到本地文件

        public static void writeJsonObject() {  
            ObjectMapper mapper = new ObjectMapper();  
            Person person = new Person("nomouse", 25, true, new Date(), "程序员",  
                    2500.0); 
            Person person2 = new Person("Jack", 26, true, new Date(), "程序员",  
                    2600.0);
            Person person3 = new Person("Tom", 27, true, new Date(), "程序员",  
                    2600.0);
            Person person4 = new Person("Kelly", 27, true, new Date(), "程序员",  
                    2600.0);  
            list=new ArrayList<Person>();
            list.add(person);
            list.add(person2);
            list.add(person3);
            list.add(person4);
            try {  
                mapper.writeValue(new File("d:/person2.json"), list); 

            } catch (JsonGenerationException e) {  
                e.printStackTrace();  
            } catch (JsonMappingException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  

       //  直接将一个json转化为对象(所谓反序列化)  
        public static void readJsonObject() {  
            ObjectMapper mapper = new ObjectMapper();  

            try {  
              JsonNode node= mapper.readTree(new File("d:/person2.json"));
              System.out.println(node.toString());
            } catch (JsonParseException e) {  
                e.printStackTrace();  
            } catch (JsonMappingException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
}

  简单解释一下,核心是Jackson中的ObjectMapper类,在序列化过程中调用writeValue方法,指定两个参数,一个是本地文件的地址可以不存在,另一个参数是Java对象,可以是单个对象也可以是个List对象,在读取json对象调用ObjectMapper的readTree方法即可,指定本地文件位置,得到一个JsonNode对象,之后调用toString方法输出即可。
  当然如果觉得比较麻烦,不需要将json文件写到本地,而是将生成的json字符串直接输出到控制台,直接使用下面的两行代码即可,这个方法的参数可以接受单个java对象,也可以接受一个list数组,非常方便
  

System.out.println(mapper.writeValueAsString(person));
System.out.println(mapper.writeValueAsString(list));

  如果将json字符串转化为json对象,不想通过读取本地json文件的方式,可以直接将json字符串转化为Java对象,直接贴代码
  

public static void Json2Java() {
        ObjectMapper mapper = new ObjectMapper();
        Person person = new Person("nomouse", 25, true, new Date(), "程序员", 2500.0);
        Person person2 = new Person("Jack", 26, true, new Date(), "程序员", 2600.0);
        Person person3 = new Person("Tom", 27, true, new Date(), "程序员", 2600.0);
        Person person4 = new Person("Kelly", 27, true, new Date(), "程序员", 2600.0);
         String json3 = "{\"name\":\"zhangsan\",\"age\":20,\"sex\":true,\"birthday\":\"2017-01-11\",\"word\":\"程序员\",\"salary\":3000}";  
        List<Person> list = new ArrayList<Person>();
        list.add(person);
        list.add(person2);
        list.add(person3);
        list.add(person4);
        try {
            String json = mapper.writeValueAsString(person);

            try {
                Person p1=mapper.readValue(json, Person.class);
                Person p2=mapper.readValue(json3, Person.class);
                System.out.println(p1.toString());
                System.out.println("p2:"+p2);
                String json2=mapper.writeValueAsString(list);
                List<Person> list2=mapper.readValue(json2, new TypeReference<List<Person>>() {
                });
                for (Person p : list2) {
                    System.out.println(p);
                }
                System.out.println(list2.toString());
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (JsonProcessingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

  简单来说,你可以手动拼接json字符串,也可以通过Java对象转化为的json字符串作为参数,当然为了方便起见,推荐后边这种。

  PS:最近一直很忙,拖了很久,这篇中断后又写的,思路比较混乱,所以说做事最好一下做完,能不要中断就尽量不要中断。不过既然这样了,这里就简单总结下整理下思路:
  Java对象转化为Json对象:核心是ObjectMapper对象
  通过调用writeValue方法可以将指定的Java对象以json文件的形式存到本地,这里可以是单个Java对象也可以是List对象
  通过调用writeValueAsString方法,可以将Java对象或者List对象转化为Json对象或Json数组,这种方式方便直接在控制台进行输出
  通过调用readValue方法,接受json对象或者是json数组,如果是单个json对象,那么第二个参数就用XXX.class即可,如果接受的是json数组,第二个参数用new TypeReference xxx格式即可。
  差不多就这样,后期写个封装工具类好了,那么这篇赶快结束吧,中断后再写真痛苦哈哈,其实还有好几种json包的使用,如果有时间再写吧,没有就用这个了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦岚如雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值