2013-09-04 2 views
8

와 나는 다음과 같은 모델을 직렬화 해요 : fooElements은 문자열 '하나', '둘'과 '세 가지를 포함일렬 배열은 잭슨

class Foo { 

    private List<String> fooElements; 
} 

합니다.

{ 
    "fooElements":[ 
     "one, two, three" 
    ] 
} 

가 어떻게 그것을 다음과 같이 얻을 수 있습니다 :

{ 
    "fooElements":[ 
     "one", "two", "three" 
    ] 
} 
+0

어떻게 할 수 있습니까? 정말 이상합니다. –

답변

8

커스텀 시리얼 라이저를 추가하여 작동 시켰습니다 :

class Foo { 
    @JsonSerialize(using = MySerializer.class) 
    private List<String> fooElements; 
} 

public class MySerializer extends JsonSerializer<Object> { 

    @Override 
    public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) 
      throws IOException, JsonProcessingException { 
     List<String> fooList = (List<String>) value; 

     if (fooList.isEmpty()) { 
      return; 
     } 

     String fooValue = fooList.get(0); 
     String[] fooElements = fooValue.split(","); 

     jgen.writeStartArray(); 
     for (String fooValue : fooElements) { 
      jgen.writeString(fooValue); 
     } 
     jgen.writeEndArray(); 
    } 
} 
7

당신이 잭슨을 사용하는 경우는, 다음 간단한 예 나를 위해 일한 JSON은 하나의 문자열이 포함되어 있습니다.

public class Foo { 
    private List<String> fooElements = Arrays.asList("one", "two", "three"); 

    public Foo() { 
    } 

    public List<String> getFooElements() { 
     return fooElements; 
    } 
} 
다음

독립형 자바 응용 프로그램 사용 :

import java.io.IOException; 

import org.codehaus.jackson.JsonGenerationException; 
import org.codehaus.jackson.map.JsonMappingException; 
import org.codehaus.jackson.map.ObjectMapper; 

public class JsonExample { 

    public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { 

     Foo foo = new Foo(); 

     ObjectMapper mapper = new ObjectMapper(); 
     System.out.println(mapper.writeValueAsString(foo)); 

    } 

} 

출력 :

{ "fooElements": [ "한"을 "이

푸 클래스를 정의 ","three "]}