2013-09-07 2 views
0

다음 형식의 json이 있습니다. 여기서 key는 속성 유형을 나타내고 value는 해당 속성 값을 나타냅니다.Jackson을 사용하여 JSON을 기반으로 목록에 나열하거나 값을 역 직렬화하는 방법은 무엇입니까?

public class Attributes { 
    List<Attribute> attributes; 
} 



public abstract class Attribute { 
    String key; 
} 



public class SingleValuedAttribute extends Attribute{ 
    String value; 
} 


public class MultiValuedAttribute extends Attribute{ 
    List<String> value; 
} 


    ObjectMapper mapper = new ObjectMapper(); 
    Attributes attributes = mapper.readValue(new File(jsonFilePath), Attributes.class); 

나는 다형성 직렬화 살펴하지 않지만 JSON 객체가 필요한 유형의 정보를 갖는 시도 :

{ "attributes": 
[ 
    { 
    "key":"name", 
    "value":"Archit" 
    }, 
    { 
    "key":"website", 
    "value":"stackoverflow" 
    }, 
    { 
    "key":"languages", 
    "value":[ 
       "python", 
       "java", 
       "c++" 
      ] 
    } 
] 
} 

나는 잭슨 사용하여 다음과 같은 자바 객체에 매핑하는 것을 시도하고있다 내 아들 중에 존재하니?

어떻게해야합니까?

추 신 : json 형식을 변경할 수 없습니다. 키 목록은 제한적이거나 제한적이지 않습니다.

+0

: 프로그램의 인쇄 위

import java.io.File; import java.util.Arrays; import java.util.List; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; public class JacksonProgram { public static void main(String[] args) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY); File json = new File("/x/test.json"); System.out.println(objectMapper.readValue(json, Attributes.class)); } } class Attributes { private List<Attribute> attributes; //getters, setters } class Attribute { private String key; private List<String> value; //getters, setters } 

: 같은

는, 예를 들어 아래 참조는 어떻게 할 수 보이는하세요 배열 (array) 또는 객체 (object)를 얻는 지에 따라 속성 (Attribute) 구현. –

답변

2

SingleValuedAttributeMultiValuedAttribute 클래스의 차이점을 볼 수 없습니다. SingleValuedAttribute 클래스는 하나의 요소 배열을 나타냅니다. 삭제를 통해 POJO 클래스 계층 구조를 단순화 할 수 있습니다. 당신은 가능성이`당신의 중 하나에 매핑 할 사용자 정의`JsonDeserializer`을 사용해야합니다

[Attribute [key=name, value=[Archit]], Attribute [key=website, value=[stackoverflow]], Attribute [key=languages, value=[python, java, c++]]] 
관련 문제