1

我将 struts2 用于 Action,将 jquery 用于 UI ...

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

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

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

但我希望它是这样的:

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

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

4

4 回答 4

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>

更多文档可以在这里找到

于 2012-09-04T15:20:59.930 回答
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 或注释方法更容易。

于 2012-09-05T04:42:20.323 回答
1

在http://www.json.org/上有一堆用于 Java 的 JSON 库。我会检查其中之一。

于 2012-09-04T12:30:00.947 回答
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 将输出后者。

于 2012-09-04T12:33:43.860 回答