Lưu ý: Tôi là trưởng nhóm EclipseLink JAXB (MOXy) và là thành viên của nhóm chuyên gia JAXB (JSR-222).
Làm thế nào tôi nên cấu trúc đối tượng Java của tôi?
Dưới đây là mô hình đối tượng của bạn. Liên kết JSON của MOXy thúc đẩy các chú thích JAXB để ánh xạ mô hình miền tới JSON, vì vậy tôi cũng đã bao gồm các mô hình đó. Triển khai JAXB có các quy tắc mặc định để ánh xạ các tên trường/thuộc tính, nhưng vì tài liệu của bạn khác với trường mặc định, mỗi trường phải được chú thích.
MyResult
package forum11001458;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="MyResult")
public class MyResult {
@XmlElement(name="AccountID")
private String accountID;
@XmlElement(name="User")
private User user;
@XmlElement(name="Result")
private Result result;
}
tài
package forum11001458;
import javax.xml.bind.annotation.XmlElement;
public class User {
@XmlElement(name="Name")
private String name;
@XmlElement(name="Email")
private String email;
}
quả
package forum11001458;
import javax.xml.bind.annotation.XmlElement;
public class Result {
@XmlElement(name="Course")
private String course;
@XmlElement(name="Score")
private String score;
}
Tôi có thể sử dụng thư viện Json nào cho điều này?
Dưới đây là cách bạn có thể sử dụng để làm MOXY JSON binding:
jaxb.tính
Để sử dụng MOXY là nhà cung cấp JAXB của bạn, bạn cần phải bao gồm một tập tin gọi jaxb.properties
với các mục sau đây trong gói tương tự như mô hình miền của bạn:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Demo
Lưu ý cách Ràng buộc JSON của MOXy không yêu cầu bất kỳ phụ thuộc thời gian biên dịch nào. Tất cả các API cần thiết có sẵn trong Java SE 6. Bạn có thể thêm các API hỗ trợ cần thiết nếu bạn đang sử dụng Java SE 5.
package forum11001458;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(MyResult.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setProperty("eclipselink.media-type", "application/json");
File json = new File("src/forum11001458/input.json");
Object myResult = unmarshaller.unmarshal(json);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty("eclipselink.media-type", "application/json");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(myResult, System.out);
}
}
input.json/Output
{
"MyResult" : {
"AccountID" : "12345",
"User" : {
"Name" : "blah blah",
"Email" : "[email protected]"
},
"Result" : {
"Course" : "blah",
"Score" : "10.0"
}
}
}
Cảm ơn bạn đã trả lời. Nếu tôi thiết kế cái này ở Jackson, thì đối tượng Java của tôi trông như thế nào? – user238021