实例解析Java的Jackson库中的数据绑定
作者:goldensun 时间:2023-08-14 14:36:51
数据绑定API用于JSON转换和使用属性访问或使用注解POJO(普通Java对象)。以下是它的两个类型。
简单数据绑定 - 转换JSON,从Java Maps, Lists, Strings, Numbers, Booleans 和 null 对象。
完整数据绑定 - 转换JSON到任何JAVA类型。我们将在下一章分别绑定。
ObjectMapper读/写JSON两种类型的数据绑定。数据绑定是最方便的方式是类似XML的JAXB解析器。
简单的数据绑定
简单的数据绑定是指JSON映射到Java核心数据类型。下表列出了JSON类型和Java类型之间的关系。
让我们来看看简单的数据操作绑定。在这里,我们将映射JAVA基本类型直接JSON,反之亦然。
创建一个名为JacksonTester在Java类文件在目录 C:\>Jackson_WORKSPACE.
File: JacksonTester.java
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
ObjectMapper mapper = new ObjectMapper();
Map<String,Object> studentDataMap = new HashMap<String,Object>();
int[] marks = {1,2,3};
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
// JAVA Object
studentDataMap.put("student", student);
// JAVA String
studentDataMap.put("name", "Mahesh Kumar");
// JAVA Boolean
studentDataMap.put("verified", Boolean.FALSE);
// Array
studentDataMap.put("marks", marks);
mapper.writeValue(new File("student.json"), studentDataMap);
//result student.json
//{
// "student":{"name":"Mahesh","age":10},
// "marks":[1,2,3],
// "verified":false,
// "name":"Mahesh Kumar"
//}
studentDataMap = mapper.readValue(new File("student.json"), Map.class);
System.out.println(studentDataMap.get("student"));
System.out.println(studentDataMap.get("name"));
System.out.println(studentDataMap.get("verified"));
System.out.println(studentDataMap.get("marks"));
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Student {
private String name;
private int age;
public Student(){}
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 String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
验证结果
使用javac编译如下类:
C:\Jackson_WORKSPACE>javac JacksonTester.java
现在运行jacksonTester看到的结果:
C:\Jackson_WORKSPACE>java JacksonTester
验证输出结果
{name=Mahesh, age=10}
Mahesh Kumar
false
[1, 2, 3]
全数据绑定
完全数据绑定是指JSON映射到任何Java对象。
//Create an ObjectMapper instance
ObjectMapper mapper = new ObjectMapper();
//map JSON content to Student object
Student student = mapper.readValue(new File("student.json"), Student.class);
//map Student object to JSON content
mapper.writeValue(new File("student.json"), student);
让我们来看看简单的数据操作绑定。在这里,我们将直接映射Java对象到JSON,反之亦然。
创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.
File: JacksonTester.java
import java.io.File;
import java.io.IOException;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonTester {
public static void main(String args[]){
JacksonTester tester = new JacksonTester();
try {
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
tester.writeJSON(student);
Student student1 = tester.readJSON();
System.out.println(student1);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void writeJSON(Student student) throws JsonGenerationException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
mapper.writeValue(new File("student.json"), student);
}
private Student readJSON() throws JsonParseException, JsonMappingException, IOException{
ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue(new File("student.json"), Student.class);
return student;
}
}
class Student {
private String name;
private int age;
public Student(){}
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 String toString(){
return "Student [ name: "+name+", age: "+ age+ " ]";
}
}
验证结果
使用javac编译如下类:
C:\Jackson_WORKSPACE>javac JacksonTester.java
现在运行jacksonTester看到的结果:
C:\Jackson_WORKSPACE>java JacksonTester
验证输出
Student [ name: Mahesh, age: 10 ]
标签:Jackson
0
投稿
猜你喜欢
unity 文件流读取图片与www读取图片的区别介绍
2023-08-30 09:10:37
struts2简介_动力节点Java学院整理
2023-06-24 02:04:07
Android BottomSheet实现可拉伸控件
2023-07-05 15:07:51
C#根据http和ftp图片地址获取对应图片
2023-06-06 02:00:23
java压缩zip文件中文乱码问题解决方法
2022-12-20 11:14:25
如何查找YUM安装的JAVA_HOME环境变量详解
2023-04-01 11:48:22
Java二叉搜索树基础原理与实现方法详解
2022-09-12 17:20:59
Android实现仿通讯录侧边栏滑动SiderBar效果代码
2021-08-03 21:07:45
Winform中Treeview实现按需加载的方法
2023-08-01 11:45:32
c#序列化详解示例
2022-09-12 02:39:00
Android编程实现播放视频的方法示例
2023-04-20 06:34:17
.net的序列化与反序列化实例
2022-12-29 00:50:50
SpringBoot2 参数管理实践之入参出参与校验的方式
2022-12-25 02:44:30
C#泛型委托的用法实例分析
2021-09-16 23:29:52
Spring boot工具类静态属性注入及多环境配置详解
2022-10-02 16:12:37
C#七大经典排序算法系列(上)
2023-08-14 04:30:45
Mybatis实现数据的增删改查实例(CRUD)
2022-05-29 07:03:50
Android 中Banner的使用详解
2023-08-18 08:57:02
c#多线程程序设计实例方法
2023-07-24 16:39:28
Android编程实现AlertDialog自定义弹出对话框的方法示例
2022-09-13 19:34:45