문제

JAVASE 독립형 응용 프로그램에서 JAXB를 사용하여 JSON 파일을 읽고 쓰고 싶습니다. 아래 스 니펫으로 XML 파일을 위해 수행했지만 JSON으로 전환하는 방법을 이해하지 못합니다.

public class Main {

  public static void main(String[] args) throws Exception {
    Book book = new Book();
    book.title = "hello";

    JAXBContext context = JAXBContext.newInstance(Book.class);
    Marshaller marshaller = context.createMarshaller();
    marshaller.marshal(book, System.out);
  }

}

메모:

  • 성능은 문제가되지 않습니다.
  • 웹 서비스 / 휴식은 주제가 없습니다.
도움이 되었습니까?

해결책

Eclipselink Moxy를 사용하면 출력을 조작하기 위해 속성을 추가 할 수 있습니다.

    public class Main {

    public static void main(String[] args) {
        Book book = new Book();
        book.title = "hello";

        JAXBContext context;
        try {
            context = JAXBContextFactory.createContext(new Class[] {Book.class}, null);
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(book, System.out);
        } catch (JAXBException e) {
            e.printStackTrace();
        }
    }

}

{ "book": { "title": "hello"}}

둘 다 org.eclipse.persistence.moxy-2.5.1.jar 및 org.eclipse.persistence.core-2.5.1.jar가 클래스 경로에서 필요합니다. 이것을 직접 놀면서 나는 다음과 같이 달렸다. 가장 인기있는 JaxB 답변. 특히 Blaise Doughan은 매우 도움이되는 곳에서 대답합니다. 검색

MarshallerProperties.MEDIA_TYPE, "application/json" 

그의 사례를 더 많이 위해.

다른 팁

원한다면 이와 같은 별도의 메소드를 만들 수 있습니다 (이미 JAXB LIBS가있는 경우).

메인 클래스

import java.io.IOException;
import javax.xml.bind.JAXBException;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

public class ConvertJson {

    public static void main(String[] args) {
        final JavaObject javaObject = new JavaObject();
        javaObject.setName("Json");
        javaObject.setRole("Moderator");
        javaObject.setAge(28);

        try {
            pojo2Json(javaObject);
        } catch (JAXBException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    private static String pojo2Json(Object obj) throws JAXBException,
            JsonParseException, JsonMappingException, IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = objectMapper.writeValueAsString(obj);
        System.out.print(jsonString);
        return jsonString;
    }

여기 Pojo가 있습니다

import org.codehaus.jackson.annotate.JsonProperty;
public class JavaObject{
    @JsonProperty(value = "Name")
    private String name;
    @JsonProperty(value = "Role")
    private String role;
    @JsonProperty(value = "Age")
    private int age;
    public JavaObject(){
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getRole() {
        return role;
    }
    public void setRole(String role) {
        this.role = role;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

}

당신은 그렇게 할 것입니다 :

public class Main {
 public static void main(String[] args) throws IOException {
  Book book = new Book();
  book.title = "hello";

  ObjectMapper mapper = new ObjectMapper();
  mapper.writeValue(System.out, book);
 }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top