我正在使用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}
我将如何实现这一目标......?
答案 0 :(得分:6)
我个人使用struts2-json
插件。它非常易于使用,您可以通过一些struts.xml条目轻松地将Map转换为Json,反之亦然。
创建一个地图及其getter / setter。
private Map<String, String> map= new HashMap<String, String>();
将全局结果定义为
<result-type name="json" class="org.apache.struts2.json.JSONResult" default="false" />
在您的struts.xml
中以及在会话堆栈中添加拦截器。
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor" />
<action name="YouAction" class="YourActionClass" method="executeMethod">
<result type="json"></result>
</action>
答案 1 :(得分:2)
要添加到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,或者有时候你会想要将多个动作放到一个类中(有时你会得到一个复杂的结构,并通过修剪它可以使你的某些方式更容易在客户端工作)。为此,我们使用包含或排除参数。
示例排除语言
将上述结果注释修改为:
@Result(type = "json", params = {
"excludeProperties",
"language"})
实现上述目标的另一种方法是明确说明我们想要的属性:
@Result(type = "json", params = {
"includeProperties",
"name"})
示例使用带有排除参数的通配符 未提供动作代码,适用于修剪复杂对象
@Result(type = "json", params = {
"excludeProperties",
"punches.*.punchesCollection, *.punchesCollection.*"})
你可以看到使用插件很难比xml或annotation方法更容易。
答案 2 :(得分:1)
http://www.json.org/上有一堆用于Java的JSON库。 我会查看其中一个。
答案 3 :(得分:1)
尝试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将输出后者。