Java对象与Json对象的相互转化之Jackson实现方式
来源:互联网 发布:erp系统模拟软件 编辑:程序博客网 时间:2024/05/24 07:22
平常应用之间传输信息,一般用的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包的使用,如果有时间再写吧,没有就用这个了
- Java对象与Json对象的相互转化之Jackson实现方式
- 使用springMVC注解@ResponseBody与jackson工具类在ajax请求中实现对象与json之间的相互转化
- 使用springMVC注解@ResponseBody与jackson工具类在ajax请求中实现对象与json之间的相互转化
- Jackson实现json与java的转化
- java 对象 与json字符串的相互转化
- Json 与 后台对象的相互转化
- json与对象的相互转化
- Jackson框架,实现Java对象/Json/XML相互转换
- json和java对象的相互转化
- 使用jackson对Java对象与JSON字符串相互转换
- Jackson学习一之对象与JSON互相转化
- Jackson学习一之对象与JSON互相转化
- Jackson学习一之对象与JSON互相转化
- jackson实现Java对象与json的互转
- Jackson学习对象与JSON互相转化
- 使用Jackson做对象与json之间的相互转换
- 通过Jackson实现Java对象和json字符串的相互转换
- 使用jackson对Java对象与JSON字符串相互转换的一些总结
- Linux lspci查看硬件设备
- grep -- 文本编辑器
- HDU-1907-John【nimm 博弈】
- Visual Studio 2017 生成dll时无法解析的外部符号 main问题
- Android 组件化-模块化之路——在展示层搭建MVP结构
- Java对象与Json对象的相互转化之Jackson实现方式
- 人生还是无题
- scikit-learn(一)
- RecastNavigation-理解高度场
- 搭建自助Git服务
- Subime Text 3快捷键的使用
- 关于各浏览器下textarea中光标位置的获取问题详解
- 同余方程
- ROBOT XRT1 介绍