我对Json并不陌生,我的目标是从Java bean创建下面的Json输出。我应该如何构造Java对象?我应该将MyResult类以及User和Result作为子类吗?我可以为此使用什么Json库?
“MyResult” { “AccountID”: “12345”, "User" { "Name": "blah blah", "Email": “blah@blah.com”, }, "Result" { "Course": “blah”, "Score": “10.0” } }
注意: 我是 EclipseLink JAXB(MOXy)的 负责人,并且是 JAXB(JSR-222) 专家组的成员。
我应该如何构造Java对象?
下面是您的对象模型的外观。MOXy的JSON绑定利用JAXB批注将域模型映射到JSON,因此我也将它们包括在内。JAXB实现具有映射字段/属性名称的默认规则,但是由于您的文档与默认名称不同,因此必须对每个字段进行注释。
我的结果
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库?
下面是如何使用MOXy进行JSON绑定的方法:
jaxb.properties
要将MOXy用作JAXB提供程序,您需要jaxb.properties在与域模型相同的程序包中包含一个带有以下条目的名为的文件:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
演示版
请注意,MOXy的JSON绑定如何不需要任何编译时依赖性。Java SE 6中提供了所有必需的API。如果使用Java SE 5,则可以添加必需的支持API。
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" : "blah@blah.com" }, "Result" : { "Course" : "blah", "Score" : "10.0" } } }