我们正在寻找一种方法(可能是现有的框架或类似方法)来生成基于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"
}
任何想法?我们当然可以手工编写代码。只是想看看那里是否有东西。
答案 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