Jackson JSON이 최상위 맵을 레코드로 구문 분석

Java 14가 추가됨the record typeJackson JSON works great with them .

최상위 수준이 임의의 키가 있는 개체인 JSON 구조를 구문 분석해야 하는 엣지 케이스에 도달했습니다.

나는 또한 Map를 읽고 싶지 않고 각 키 입력 항목을 각각 레코드에 매핑하는 레코드를 읽고 싶었습니다.

다음은 구문 분석하려는 인위적인 예제 JSON입니다.

{
  "Some Child's Name": {
    "age": 5
  },
  "Some Adult's Name": {
    "age": 21
  }
}

@JsonAnySetter 필드의 Map 주석(1)은 대부분의 방법을 얻었지만 솔루션의 마지막 부분은 맵을 (2)에서 미리 인스턴스화하는 것이 었습니다.

위의 JSON을 수용할 수 있는 최종 레코드 선언은 다음과 같습니다.

record People(
    @JsonAnySetter // (1)
    Map<String, Person> people
) {
    public People {
        people = new HashMap<>(); // (2)
    }
}

record Person(
    int age
) { }


예를 들어 ObjectMapper를 사용하면 ...

final People people = objectMapper.readValue("""
    {
      "Some Child's Name": {
        "age": 5
      },
      "Some Adult's Name": {
        "age": 21
      }
    }""", People.class);
System.out.println(people);


출력

People[people={Some Adult's Name=Person[age=21], Some Child's Name=Person[age=5]}]

좋은 웹페이지 즐겨찾기