JSON 데이터 처리 프레임 워크 Jackson은 첫 번째 부분 직렬화 및 역 직렬화 코어를 설명했습니다.

프로젝트에 다음 jar를 도입하면 jackson을 사용하여 JSON 데이터 직렬화 및 역 직렬화를 수행 할 수 있습니다.

com.fasterxml.jackson.core jackson-databind 2.9.8 PlayerStar 엔티티 클래스를 작성합니다. 엔티티 클래스는 주로 잭슨의 직렬화를 최대한 보여주기 위해 농구 스타의 이름, 나이, 취미, 친구, 연간 수입 및 기타 정보를 반영합니다. 역 직렬화 기능을 사용하면 배열, 목록 및 맵이 모두이 클래스에 통합됩니다. 그리고 getInstance를 통해 농구 스타 Jordan 객체를 초기화합니다.

@Data
public class PlayerStar {

private String name;
private Integer age;
private String [] hobbies; // Hobbies, array
private List friends; // Friends
private Map <String, BigDecimal> salary; // 연간 소득지도

//
공개 정적 PlayerStar 를 테스트하기위한 개체 초기화 getInstance () { PlayerStar playerStar = new PlayerStar ();

playerStar.setName("乔丹");
playerStar.setAge(45);
playerStar.setHobbies(new String[]{"高尔夫球", "棒球"});
Map<String, BigDecimal> salary = new HashMap<String, BigDecimal>() {
   
   {
  put("2000", new BigDecimal(10000000));
  put("2010", new BigDecimal(62000000));
  put("2020", new BigDecimal(112400000));
}};
playerStar.setSalary(salary);
playerStar.setFriends(Arrays.asList("kobe", "curry", "james"));

return playerStar;

}

}
2. 직렬화 방법
다음 코드는 PlayerStar 객체를 JSON 문자열로 직렬화하는 방법을 보여줍니다.

writeValue는 File을 매개 변수로 수신하고 JSON 직렬화 결과를 파일에 저장할 수 있습니다.
writeValueAsString은 JSON 직렬화 결과를 문자열로 반환합니다.
writerWithDefaultPrettyPrinter 메서드는 JSON 직렬화 결과의 형식을 지정하고 더 나은 표시 구조를 제공하며
@Test
void testObject2JSON을 쉽게 볼 수 있습니다. () throws IOException { // 객체 인스턴스 가져 오기 PlayerStar player = PlayerStar.getInstance ();

// ObjectMapper는 Jackson의 API 도구 클래스로 존재합니다.
ObjectMapper mapper = new ObjectMapper ();
// JSON 형식으로 플레이어 개체를 직렬화하고 직렬화 결과를 파일에
기록 합니다. mapper.writeValue (new File ( "d : \ data) \ jackson \ player.json”), 플레이어);

// 플레이어 개체를 JSON 형식의
String 개체로 직렬화 String jsonString = mapper.writeValueAsString (player);
System.out.println (jsonString);

// 플레이어 객체를 JSON 형식의 String 객체로 직렬화 (형식 미화)
String jsonInString2 = mapper.writerWithDefaultPrettyPrinter ()
.writeValueAsString (player);
System.out.println (jsonInString2);
}
jsonString 콘솔 인쇄 출력 결과, 또한 d : \ data \ jackson \ player.json 파일의 내용

{ "이름": "요르단", "age": 45, "hobbies": [ "golf", "baseball"], "friends": [ "kobe", "curry", "james"], "salary ": {"2000 ": 10000000,"2010 ": 62000000,"2020 ": 112400000}}
writerWithDefaultPrettyPrinter () 메서드를 사용하기 때문에 jsonString2의 콘솔 인쇄 출력, 형식이 아름답게 표시됩니다.

{ "이름": "요르단", "나이": 45, "취미": [ "골프", "야구"], "친구": [ "고베", "카레", "제임스"], "급여 ": { "2000 ": 10000000, "2010 ": 62000000, "2020 ": 112400000 } } 3. 역 직렬화 방법 다음 코드는 JSON 문자열을 Java 개체로 역 직렬화하는 방법을 보여줍니다.











@Test
void testJSON2Object () throws IOException { ObjectMapper mapper = new ObjectMapper (); // 파일에서 JSON 문자열을 읽어서 자바 객체로 역 직렬화 PlayerStar player = mapper.readValue (new File ( "d : \ data \) jackson \ player.json”), PlayerStar.class); System.out.println (player);



// JSON 문자열을 자바 객체로 역 직렬화
String jsonInString = "{"name ":"Jordan ","age ": 45,"hobbies ": ["golf ","baseball "]}";
PlayerStar jordan = mapper.readValue (jsonInString, PlayerStar.class);

System.out.println (jordan);

}
PlayerStar 객체 콘솔 출력은 다음과 같습니다 (여기서 출력은 JSON 형식이 아니라 java 객체의 toString () 메서드 값).

PlayerStar (이름 = 요르단, 나이 = 45, 취미 = [골프, 야구], 친구 = [코베, 카레, 제임스], 급여 = {2000 = 10000000, 2010 = 62000000, 2020 = 112400000})
PlayerStar (name = 요르단 , age = 45, hobbies = [golf, baseball], friends = null, salary = null)
넷째, @JsonProperty 필드 이름 변경은 @JsonProperty
를 사용하여 직렬화 및 역 직렬화 된 개체 속성의 이름 변경에 영향을 줄 수 있습니다.

@Data
public class PlayerStar {

@JsonProperty ( "playerName")
private String name; // 비 직렬화에도 영향을 미치는 속성 이름을 playerName으로 직렬화합니다.
위 코드의 주석을 사용하면 JSON 직렬화 결과의 name 속성이 playerName 속성이됩니다.

{ "PlayerName": "Jordan"……
역 직렬화에도 영향을줍니다. 다음 역 직렬화 코드는 name 속성이 사용되기 때문에 오류를보고합니다. PlayerName을 사용해야합니다.

String jsonInString = "{"name ":"Jordan ","age ": 45,"hobbies ": ["golf ","baseball "]}";
PlayerStar jordan = mapper.readValue (jsonInString, PlayerStar.class);
5. null 필드의 직렬화 무시 @JsonInclude
객체의 멤버 변수에 값을 할당하지 않으면 기본적으로 Jackson의 직렬화 결과는 다음과 같습니다.

{ "Age": 45, "hobbies": null, "friends": null, "salary": null, "playerName": "Jordan" } null 값이 JSON 직렬화 결과에 반영되지 않도록하려면 다음 방법을 사용할 수 있습니다. 특정 직렬화의 전역 범위에서 null 멤버 변수를 무시하려면 다음 API를 사용할 수 있습니다.






ObjectMapper mapper = new ObjectMapper ();
mapper.setSerializationInclusion (JsonInclude.Include.NON_NULL);
또는 클래스 이름 위에 다음 주석을 추가합니다. 이 주석은 클래스의 모든 멤버 변수에 적용되며 멤버 변수가 null 인 경우 직렬화 결과에 포함되지 않습니다.

@JsonInclude (JsonInclude.Include.NON_NULL)
public class PlayerStar { } PlayerStar 클래스의 일부 멤버 변수에 대해 null을 무시하려면 멤버 변수에 주석을 추가 할 수 있습니다.


@JsonInclude (JsonInclude.Include.NON_NULL)
private String [] hobbies; // 취미, 배열
@JsonInclude (JsonInclude.Include.NON_NULL)
private List friends; // friends
@JsonInclude (JsonInclude.Include.NON_NULL)
private Map <String , BigDecimal> salary; // 연소득 Map
에서 null 멤버 변수를 무시한 JSON 직렬화 결과는 다음과 같습니다.

{ "Age": 45, "playerName": "Jordan" } Six. 지정된 필드 무시 기본적으로 Jackson은 정적 및 임시 멤버 변수를 직렬화 및 역 직렬화하지 않습니다. 우리는 또한 통과 할 수 있습니다




@JsonIgnore가 클래스 멤버 변수에 추가되고 멤버 변수가 직렬화 및 역 직렬화 프로세스에서 제외됩니다.
@JsonIgnoreProperties가 클래스 선언에 추가되어 직렬화 및 역 직렬화에서 제외되는 클래스의 필드를 지정합니다. 프로세스 외부에서
위의 두 가지 주석 중 하나를 선택할 수 있습니다. 아래 코드에서 두 가지 주석을 모두 사용했으며 기능이 반복됩니다.

@Data
@JsonIgnoreProperties ({“hobbies”,“friends”,“salary”})
public class PlayerStar {

@JsonProperty ( "playerName")
개인 문자열 이름;
개인 정수 연령;

@JsonIgnore
private String [] hobbies; // Hobbies, array
@JsonIgnore
private List friends; // Friends
@JsonIgnore
private Map <String, BigDecimal> salary; // 연간 소득지도


클래스 또는 멤버 변수에 주석을 추가 한 후 직렬화 결과는 다음과 같으며 지정된 필드는 무시됩니다.

{ "Age": 45, "playerName": "Jordan" } 이 두 주석은 JSON 문자열로 직렬화하는 프로세스뿐만 아니라 JSON 문자열을 Java 객체로 역 직렬화하는 프로세스에도 영향을줍니다. 예 : JSON 문자열이 클래스에서 JsonIgnore의 속성 값 hobbies를 포함하는 경우 역 직렬화되지 않고 Java 개체의 멤버 변수 취미에 할당됩니다. 심천 웹 사이트 건설 www.sz886.com




추천

출처blog.csdn.net/weixin_45032957/article/details/108637147