将Java POJO编组为JSON所需的最小结构是什么?

将Java POJO编组为JSON所需的最小结构是什么?,java,json,marshalling,Java,Json,Marshalling,这很直截了当。将JavaPOJO编组为JSON所需的最低结构是什么 如果一个对象只有getter/setter,或者字段声明是必需的,那么可以将其作为JSON进行封送吗 Setter/Getter示例: class Circle{ private float radius; private float pi; // setter and getters for those aboce; public float getArea(){ // returns the computed

这很直截了当。将JavaPOJO编组为JSON所需的最低结构是什么

如果一个对象只有getter/setter,或者字段声明是必需的,那么可以将其作为JSON进行封送吗

Setter/Getter示例:

class Circle{
 private float radius;
 private float pi;

 // setter and getters for those aboce;

 public float getArea(){
 // returns the computed area;
 }
}

那么,如果Foo类中没有将“area”字段定义为字段,那么这样的对象可以作为JSON进行封送吗?还是必须显式声明POJO中的所有字段?

这实际上取决于编组引擎。最近在Spring下使用jackson mapper,如果我没有getter操作(getArea()就是一个很好的例子),那么我的实例就无法正确地编组

假设地说,如果您有标准的bean set/get(或者在您的例子中是get),它应该是好的。

如果您使用库,则不需要getter/setter:

示例来自:


注意:我是专家组的负责人和成员

圆圈

对于MOXy,唯一需要的注释是
区域
属性上的
@xmlement
,因为没有与getter对应的setter。
@xmlement
包含在Java SE 6及更高版本中:

package forum10028037;

import javax.xml.bind.annotation.XmlElement;

class Circle{

    private float radius;
    private float pi;

    public float getRadius() {
        return radius;
    }

    public void setRadius(float radius) {
        this.radius = radius;
    }

    public float getPi() {
        return pi;
    }

    public void setPi(float pi) {
        this.pi = pi;
    }

    @XmlElement
    public float getArea(){
        return pi * radius * radius;
    }

}
演示

package forum10028037;

import javax.xml.bind.*;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Circle.class);

        Circle circle = new Circle();
        circle.setPi(3.14f);
        circle.setRadius(10.1f);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.setProperty("eclipselink.media-type", "application/json");
        marshaller.setProperty("eclipselink.json.include-root", false);
        marshaller.marshal(circle, System.out);
    }

}
输出

{
   "area" : 320.31143,
   "pi" : 3.14,
   "radius" : 10.1
}
了解更多信息


我想这是我一直在寻找的。所有答案在某种程度上都是正确的,但我发现你的答案是最完整的。感谢您花时间为我澄清这一点。Doughan先生提供的答案是正确的。让我再补充两件事。首先,只需删除一行代码(设置application.media type),就可以得到XML。在JSON和XML之间轻松切换是MOXy的魅力之一。其次,使用MOXy进行编组和解编是很快的(在我的一些测试中,这种速度远低于一微秒)。创建JAXBContext很慢。只需创建一次JAXBContext,并将其保留。
{
   "area" : 320.31143,
   "pi" : 3.14,
   "radius" : 10.1
}