備註:我是EclipseLink JAXB (MOXy)的領導和JAXB (JSR-222)專家組的成員。
我應該如何構建我的Java對象?
下面是你的對象模型可能是什麼樣子。 MOXy的JSON綁定利用JAXB註釋將域模型映射到JSON,所以我也包含了這些。 JAXB實現具有映射字段/屬性名稱的默認規則,但由於文檔不同於默認,所以每個字段都必須註釋。
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;
}
用戶
package forum11001458;
import javax.xml.bind.annotation.XmlElement;
public class User {
@XmlElement(name="Name")
private String name;
@XmlElement(name="Email")
private String email;
}
結果
package forum11001458;
import javax.xml.bind.annotation.XmlElement;
public class Result {
@XmlElement(name="Course")
private String course;
@XmlElement(name="Score")
private String score;
}
我可以使用哪些JSON庫這個?
下面是你如何使用莫西做JSON綁定:
JAXB。性能
要使用莫西爲您的JAXB提供你需要包括一個在同一包以下項爲您的域模型稱爲jaxb.properties
文件:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
演示
注意如何MOXy的JSON綁定不需要任何編譯時間依賴性。所有必要的API在Java中可用SE 6,你可以添加必要的支持的API,如果你使用的是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 /輸出
{
"MyResult" : {
"AccountID" : "12345",
"User" : {
"Name" : "blah blah",
"Email" : "[email protected]"
},
"Result" : {
"Course" : "blah",
"Score" : "10.0"
}
}
}
感謝您的回覆。如果我在傑克遜設計這個,我的Java對象應該如何看待? – user238021