2013-05-17 10 views
6

투하 및 JAXB를 통해 JSON 배열에 목록을 포장 :XML 내가 형태로 XML에 주석 개체를 마샬링하는 JAXB를 사용하고

<channels> 
    <channel>Test A</channel> 
    <channel>Test B</channel> 
    </channels> 

내가 대신 JAXB를 사용하여 JSON이 마샬링 할 (http://blog.bdoughan.com/2011/04/jaxb-and-json-via-jettison.html를 ALA)

"channels" : { 
    {"Test A"}, {"Test B"} 
    }, 
:

"channels" : { 
    "channel" : [ "Test A", "Test B" ] 
    }, 

정말 내가 다음과 같은 형태로 마샬링 할 :하지만 다음과 같은 것으로 마샬링

어떻게해야합니까? 그것을하는 것이 옳은가?

+1

"채널": [ "테스트 A", "테스트 B"]'아니겠습니까? –

답변

4

참고 : 저는 EclipseLink JAXB (MOXy)이며 JAXB 2 (JSR-222) 전문가 그룹의 구성원입니다.

다음은 EclipseLink JAXB (MOXy)에서 JSON 바인딩을 사용하여이 사용 사례를 지원하는 방법입니다.

자바 모델 (루트)

다음은 내가이 예를 들어, 사용하는 자바 모델입니다.

이 JAXB 공급자로 MOXY를 지정하려면이 파일을 포함 할 필요가

import java.util.*; 
import javax.xml.bind.annotation.*; 

@XmlRootElement 
public class Root { 

    private List<String> channels = new ArrayList<String>(); 

    @XmlElementWrapper 
    @XmlElement(name="channel") 
    public List<String> getChannels() { 
     return channels; 
    } 

} 

JAXB 프로 바이더로 목시를 지정합니다 (jaxb.properties)는 다음과 도메인 모델과 동일한 패키지에 jaxb.properties라고 항목 (참조 :) :

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

데모 코드

,536,

아래의 데모 코드에서 우리는 XML과 JSON 모두에 동일한 인스턴스를 출력 할 것입니다.다음은 출력

import javax.xml.bind.*; 
import org.eclipse.persistence.jaxb.MarshallerProperties; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Root.class); 
     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     Root root = new Root(); 
     root.getChannels().add("Test A"); 
     root.getChannels().add("Test B"); 

     // Output XML 
     marshaller.marshal(root, System.out); 

     // Output JSON 
     marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json"); 
     marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false); 
     marshaller.setProperty(MarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); 
     marshaller.marshal(root, System.out); 
    } 

} 

데모 코드 실행의 출력을 것입니다 자세한 내용

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <channels> 
     <channel>Test A</channel> 
     <channel>Test B</channel> 
    </channels> 
</root> 
{ 
    "channels" : [ "Test A", "Test B" ] 
} 

0

가장 간단한 방법은 JAXB 모델을 적응 JSON 모델로 변환하는 것입니다.

당신은 할 것 :

  1. 당신이 당신의 JAXB 모델을 인스턴스화하는 방법에 따라 JSON 모델
  2. 정렬 화 json으로 모델

로 변환 JAXB 프로 모델의 인스턴스를, 대신 JSON 모델을 직접 인스턴스화 할 수 있습니다.

+1

간단한 예를 들려 줄 수 있습니까? – James