从POJO生成JSON样本

时间:2012-08-23 22:42:42

标签: java json pojo

我们正在寻找一种方法(可能是现有的框架或类似方法)来生成基于POJO(源代码或二进制代码)的示例JSON片段。例如:

public class foo {
   String var1;
   String var2;

   public String getVar1() { return var1; }
   public void setVar1(String var1) { this.var1 = var1; }

   public String getVar2() { return var2; }
   public void setVar2(String var2) { this.var2 = var2; }
}

会产生一个看似如下的JSON示例:

{
  "var1": "string1",
  "var2": "string2"
}

任何想法?我们当然可以手工编写代码。只是想看看那里是否有东西。

6 个答案:

答案 0 :(得分:3)

你也可以看看Gson(它直接读/写字段,不需要getter / setter):

Foo foo = ...
Gson gson = new Gson();
String json = gson.toJson(foo);

帮自己一个忙,不要手工编写JSON(或XML,或任何结构化数据格式,如果你可以避免它)。它不必要地重新发明轮子。有人之前已经做过,已经为你解决了逃逸,筑巢和各种边境案件。

答案 1 :(得分:3)

还有另一个名为Genson http://code.google.com/p/genson/的图书馆。

实际上Genson比Gson更快,功能更多,并且表现接近jackson(但它的重量更轻)请参阅http://code.google.com/p/genson/wiki/Metrics。它使用àstreamedapi而不是dom模型,它带来了更好的可伸缩性,并且在Web应用程序中非常好用,您可以在输入到达时处理转换。

Genson非常适合各种用例,从简单的转换到完全自定义的所有过程。您可以配置很多东西(使用字段和/或方法,使用带参数的构造函数,没有任何注释,通过可见性过滤属性等等)。你应该看看维基。

最新版本(0.91)可在maven中央存储库中使用。

<dependency>
    <groupId>com.owlike</groupId>
    <artifactId>genson</artifactId>
    <version>0.91</version>
</dependency>

免责声明:我是图书馆的作者,但我努力做到客观(特别是在基准测试中)。

修改 关于Gson和Jackson的几句话。我用了两年多的杰克逊和一点Gson。首先要注意的是杰克逊是那里最快的json / java库(Gesnon试图击败它但很难)。 Jackson还有许多功能和配置可能性(大多数基于注释)。我有杰克逊的标准和高级使用,直到我需要杰克逊没有提供的功能,这是很好的。我发现这个库真的难以扩展(对于我的用例,如果不重写很大一部分就不可能。)

然后我尝试了Gson。关于Gson的首要注意事项是它不使用getter / setter而只使用字段!它的表现并不好(特别是与Jackson或Genson相比)。 随着最新版本的改进,它们也提供了流式api,但它仍然不够快。在开始时它的主要优点是对Java泛型的良好支持,但Jackson和Genson也提供了它。另请注意,Gson开箱即用的功能比Genson或Jackson少。 我也尝试在Gson中实现我需要的功能,但是我发现Beans数据绑定部分不可扩展(靠近没有扩展点的单个类中的所有内容),所以我必须重写它。这是不可能的,这就是我最终创建Genson的方式。

如果你不想使用Genson,我真的推荐杰克逊超过Gson。

答案 2 :(得分:2)

答案 3 :(得分:1)

使用GSON

Foo foo = new Foo();
foo.setVar1("string1");
foo.setVar2("string2");

Gson gson = new Gson();      
String json = gson.toJson(foo);

答案 4 :(得分:1)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

您可以使用 EclipseLink JAXB(MOXy)将对象模型转换为JSON(和/或XML)。以下是一个完整的例子。

<强> jaxb.properties

要将MOXy指定为JAXB提供程序,您需要在与域模型相同的程序包中包含名为jaxb.properties的文件,并带有以下条目(请参阅:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html)。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

<强>演示

下面的演示代码可用于从foo的实例生成JSON输出。请注意如何仅使用标准JAXB API。自Java SE 6以来,JAXB API一直在JDK / RE中。

package forum12101023;

import javax.xml.bind.*;

public class Demo {

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

        foo foo = new foo();
        foo.setVar1("string1");
        foo.setVar2("string2");

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

}

<强>输出

{
   "var1" : "string1",
   "var2" : "string2"
}

了解更多信息

答案 5 :(得分:-1)

你可以用Gson来做。

Gson gson = new Gson();   
String fooJSON= gson.toJson(foo);  

检查this链接以获取详细说明以及如何在JS / Extjs中执行此操作以及从JSON反序列化到POJO