一尘不染

Json-Json的Java对象

json

我对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”
     }
 }

阅读 213

收藏
2020-07-27

共1个答案

一尘不染

注意: 我是 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"
      }
   }
}
2020-07-27