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 ]



相关问答

更多

readfiles是序列化还是反序列化

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

php 什么是序列化

序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。 PHP中的序列化和反序列化分别通过函数serialize()和unserialize()即可实现。serialize()的参数可以是resource类型外的所有变量类型,最常见的是用来序列化对象,unseialize()将serialize的返回结果作为参数,进行反序列化,得到原对象。

使用值对象作为实体ID时自定义Jackson序列化(Customize Jackson serialization when using value objects as entity id)

使用@JsonUnwrapped。 它与具有单一属性的对象完美配合,IIRC。 http://fasterxml.github.io/jackson-annotations/javadoc/2.1.0/com/fasterxml/jackson/annotation/JsonUnwrapped.html Use @JsonUnwrapped. It works perfectly with objects with a single property, too, IIRC. http://fast ...

Java中序列化作用是什么?为什么要序列化?

序列化是可以讲对象长期保存在硬盘上,或通过网络传递给远端,可以序列化的对象要实现Serializable接口,此接口中没有方法,是一个标志,说明实现此接口的类可以启动并使用系列化功能; 序列化本质上是将对象解析成二进制流,并且实现Serializable接口的子类都有序列化功能;

为什么序列化属性需要序列化一个对象(Why is Serializable Attribute required for an object to be serialized)

据我所知, SerializableAttribute背后的想法是为二进制序列化创建一个选择加入系统。 请记住,与使用公共属性的XML序列化不同,二进制序列化默认捕获所有私有字段。 这不仅可能包括操作系统结构和私有数据,而且它们不应该公开,但反序列化它可能会导致可能导致应用程序崩溃的错误状态(愚蠢的例子:在另一台计算机上打开文件的句柄)。 As I understand it, the idea behind the SerializableAttribute is to create an op ...