Jackson对象序列化/反系列化

2019-05-09 23:25|来源: 网路

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

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


文件: 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反序列化这个Json对象?(Deserialize this Json Object using Jackson?)

totalDownloads属性不是数组,因此无法映射到List<Integer> 。 改为使用Map<String, Integer>并确保告诉Jackson忽略未映射的属性以避免映射错误: @JsonIgnoreProperties(ignoreUnknown = true) public class BintrayDownloadCounts { @JsonProperty("totalDownloads") private Map<String, Integer> to

hessian 对象的序列化

1、解释: 简单说就是为了保存在内存中的各种对象的状态,并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存Object States,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。 2、什么情况下需要序列化 a)当你想把的内存中的对象保存到一个文件中或者数据库中时候; b)当你想用套接字在网络上传送对象的时候; c)当你想通过RMI传输对象的时候; 3、当对一个对象实现序列化时,究竟发生了什么? 在没有序列化前,每个保存在堆(Heap)中的对象都 ...

readfiles是序列化还是反序列化

准备工作和类设计 1 启动VS,新建C# 类库项目,并命名为KTools。 2 添加C# Winform项目,命名为Test,重命名主窗口为MainForm,并设置为启动项。同时在KTools项目添加文件夹Serializer,并在该文件夹中添加3个类:XMLSerializer、SoapSerializer和BinarySerializer,如下图: 3 该类库的设计目标是快速方便,最好把序列化和反序列化的方法做成静态方法,这样就可以省去了实例化的步骤。序列化大体上分为序列化到文件和序列化到流, ...

如何使用Jackson反序列化对象变量?(How do I deserialize object variables using Jackson?)

JSON包含“valueDate”,但@JsonProperty注释指定“value_date”(带下划线)。 注释中的“generation_date”与JSON中的“generationTimeStamp”相同。 The JSON contains "valueDate" but the @JsonProperty annotation specifies "value_date" (with an underscore). Ditto "generation_date" in the ann ...

使用DataContractSerializer对没有命名空间的对象进行序列化(Serializing object with no namespaces using DataContractSerializer)

您需要标记要序列化的类: [DataContract(Namespace="")] 在这种情况下,数据合同序列化程序将不会为您的序列化对象使用任何命名空间。 渣子 You need to mark the classes you want to serialize with: [DataContract(Namespace="")] In that case, the data contract serializer will not use any namespace for your s

相关文章

更多

最近更新

更多