> Java > java지도 시간 > 본문

Java Jackson 라이브러리에서 객체의 직렬화 및 데이터 일반 ​​바인딩을 분석합니다.

高洛峰
풀어 주다: 2017-01-18 10:48:36
원래의
1379명이 탐색했습니다.

Jackson 객체 직렬화
여기에서는 Java 객체를 JSON 파일로 직렬화한 다음 JSON 파일을 읽어서 객체로 변환하는 방법을 소개합니다. 이 예에서는 Student 클래스가 생성됩니다. JSON으로 표시되는 학생 개체를 포함하는 Student.json 파일을 만듭니다.

C:>Jackson_WORKSPACE에 JacksonTester라는 Java 클래스 파일을 생성합니다.

파일: 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 Compile 사용 다음 클래스:

C:\Jackson_WORKSPACE>javac JacksonTester.java
로그인 후 복사
로그인 후 복사

이제 jacksonTester를 실행하여 결과를 확인합니다.

C:\Jackson_WORKSPACE>java JacksonTester
로그인 후 복사
로그인 후 복사

출력 결과 확인

Student [ name: Mahesh, age: 10 ]
로그인 후 복사

Jackson 데이터 바인딩 제네릭
간단한 데이터 바인딩에서 중앙에서, String을 키 개체와 값 개체 매핑 클래스로 사용합니다. 대신 구체적인 Java 객체를 사용하고 JSON으로 타입캐스트하여 사용할 수 있습니다.


UserData 클래스를 사용하여 사용자별 데이터를 저장하는 다음 예를 살펴보세요.

Java 클래스 파일 디렉토리 C:>Jackson_WORKSPACE에 JacksonTester라는 파일을 생성합니다.

파일 이름: JacksonTester.java

import 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]
로그인 후 복사

자바의 Jackson 라이브러리 구문 분석 자세히 알아보기 객체 직렬화 및 데이터 일반 ​​바인딩과 관련된 기사는 PHP 중국어 웹사이트에 주목하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!