java jackson 泛型_解析Java的Jackson库中对象的序列化与数据泛型绑定

Jackson对象序列化

这里将介绍将Java对象序列化到一个JSON文件,然后再读取JSON文件获取转换为对象。在这个例子中,创建了Student类。创建将有学生对象以JSON表示在一个student.json文件。

创建一个名为JacksonTester在Java类文件在 C:\>Jackson_WORKSPACE.

文件: JacksonTester.javaimport 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数据绑定泛型

在简单的数据绑定中,我们使用String作为关键对象,并作为一个值对象映射类。相反,我们可以使用具体的Java对象和类型强制转换到JSON使用。

考虑下面的例子使用一个类的UserData来保存用户专用数据。

创建一个名为JacksonTester在Java类文件目录 C:\>Jackson_WORKSPACE.

文件名: JacksonTester.javaimport java.io.File;

import java.io.IOException;

import java.util.Arrays;

import java.util.HashMap;

import java.util.List;

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;

import org.codehaus.jackson.type.TypeReference;

public class JacksonTester {

public static void main(String args[]){

JacksonTester tester = new JacksonTester();

try {

ObjectMapper mapper = new ObjectMapper();

Map userDataMap = new HashMap();

UserData studentData = new UserData();

int[] marks = {1,2,3};

Student student = new Student();

student.setAge(10);

student.setName("Mahesh");

// JAVA Object

studentData.setStudent(student);

// JAVA String

studentData.setName("Mahesh Kumar");

// JAVA Boolean

studentData.setVerified(Boolean.FALSE);

// Array

studentData.setMarks(marks);

TypeReference ref = new TypeReference>() { };

userDataMap.put("studentData1", studentData);

mapper.writeValue(new File("student.json"), userDataMap);

//{

// "studentData1":

// {

// "student":

// {

// "name":"Mahesh",

// "age":10

// },

// "name":"Mahesh Kumar",

// "verified":false,

// "marks":[1,2,3]

// }

//}

userDataMap = mapper.readValue(new File("student.json"), ref);

System.out.println(userDataMap.get("studentData1").getStudent());

System.out.println(userDataMap.get("studentData1").getName());

System.out.println(userDataMap.get("studentData1").getVerified());

System.out.println(Arrays.toString(userDataMap.get("studentData1").getMarks()));

} 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+ " ]";

}

}

class UserData {

private Student student;

private String name;

private Boolean verified;

private int[] marks;

public UserData(){}

public Student getStudent() {

return student;

}

public void setStudent(Student student) {

this.student = student;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Boolean getVerified() {

return verified;

}

public void setVerified(Boolean verified) {

this.verified = verified;

}

public int[] getMarks() {

return marks;

}

public void setMarks(int[] marks) {

this.marks = marks;

}

}

验证输出

使用javac编译如下类:C:\Jackson_WORKSPACE>javac JacksonTester.java

现在运行jacksonTester看到的结果:C:\Jackson_WORKSPACE>java JacksonTester

验证输出Student [ name: Mahesh, age: 10 ]

Mahesh Kumar

false

[1, 2, 3]

更多解析Java的Jackson库中对象的序列化与数据泛型绑定相关文章请关注PHP中文网!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值