将Java对象转换为JSON?

我正在使用struts2 for Action和jquery for UI …

我想知道如何将Map对象转换为JSON对象并将其发送回UI,

现在能够在JSP页面中打印普通的java Map对象:

{71=Heart XXX, 76=No Heart YYY} 

但我希望它是这样的:

 {71:Heart XXX, 76:No Heart YYY} 

我将如何实现这一目标……?

试试Gson :

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

不过,我不建议将这种代码放入JSP中。 像这样的东西应该存在于像Servlet或Action类这样的控制器中。

您也绝对不希望输出为:

 {71:Heart XXX, 76:No Heart YYY} 

而是适当的JSON(引用的名称,引用的字符串值):

 {"71":"Heart XXX", "76":"No Heart YYY"} 

Gson将输出后者。

我个人使用struts2-json插件。 它非常易于使用,您可以通过一些struts.xml条目轻松地将Map转换为Json,反之亦然。 创建一个地图及其getter / setter。

 private Map map= new HashMap(); 

将全局结果定义为

   

struts.xml以及在会话堆栈中添加拦截器。

     

可在此处找到更多文档

要添加到Ashish的答案,那就是在添加struts2-json-plugin之后。

我喜欢在可能的情况下使用struts2-conventions-plugin,因为我在struts.xml中很少使用并且更喜欢使用大多数注释。

要使您的操作在使用约定时返回json,有两个步骤:1)让您的操作使用json-default包,2)将操作定义为具有json结果类型。

JSON注释示例

 package org.test.action; import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.convention.annotation.ParentPackage; import org.apache.struts2.convention.annotation.Result; @ParentPackage("json-default") @Result(type = "json") public class JsonTest extends ActionSupport{ private String name = "Hello World"; private String language = "Java, I mean English"; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getLanguage() { return language; } public void setLanguage(String language) { this.language = language; } } 

有时候值比原语更复杂,你会想要修剪返回的json,或者有时候你会想要将多个动作放到一个类中(有时候你会得到一个复杂的结构,并且通过修剪某些方法可以让你的工作在客户更容易)。 为此,我们使用include或exclude参数。

示例排除语言

将上述结果注释修改为:

 @Result(type = "json", params = { "excludeProperties", "language"}) 

实现上述目标的另一种方法是明确说明我们想要的属性:

 @Result(type = "json", params = { "includeProperties", "name"}) 

示例使用带有排除参数的通配符未提供操作代码,适用于修剪复杂对象

 @Result(type = "json", params = { "excludeProperties", "punches.*.punchesCollection, *.punchesCollection.*"}) 

你可以看到使用插件很难比xml或annotation方法更容易。

在http://www.json.org/上有一堆Java的JSON库。 我会查看其中一个。