我如何以json格式创建数据

时间:2012-03-19 20:44:50

标签: json struts2 dojox.grid.datagrid dojo

我有一个Struts 2应用程序,我在其中使用struts 2 json插件进行json处理。

现在我想使用dojo数据网格来填充动作中的数据。我可以打电话给这个动作。所有内置数据类型都在操作中。但是,当我在我的类中使用自定义对象时,我在动作类中得到错误。

我想使用ItemFileReadStore作为网格的存储,它需要以下格式的数据:

items: [{obj1},{obj2},{obj3},{obj4}]

现在我有一个名为Device的类。我想将一个Device对象列表发送回客户端。但是我如何提供上述格式的数据并在客户端使用它。?

编辑:

我收到以下错误:

 E com.ibm.ws.webcontainer.webapp.WebApp logError SRVE0293E: [Servlet Error]-[com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException]: com.ibm.ws.webcontainer.webapp.WebAppErrorReport: com.googlecode.jsonplugin.JSONException: com.googlecode.jsonplugin.JSONException: java.lang.reflect.InvocationTargetException
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendError(WebAppDispatcherContext.java:624)
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendError(SRTServletResponse.java:1071)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:725)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
at org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:852)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:917)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:924)
at com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:852)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3610)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:274)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:926)
at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1557)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:173)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:83)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:202)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:766)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:896)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)

出现此错误的原因是什么。我的行动课是:

jsonWrapper.setIdentifier("firstName");         

        jsonWrapper.getListItems().add(User.getUser("t2590pk"));            
        jsonWrapper.getListItems().add(User.getUser("t8923sm"));

        jsonWrapper.setItems(jsonWrapper.gson.toJson(jsonWrapper.getListItems()));

        System.out.println(jsonWrapper.getItems());

Struts配置:

<action name="jsonTest" class="com.dcx.ispeed.actions.JSONTest">            
        <result type="json">                
            <param name="excludeProperties">
                gson
            </param>                
        </result>
    </action>

jsonWrapper类:

/**


* 
 */
package com.dcx.ispeed.business;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;
import com.ibm.ws.http.HttpRequest;

/**
 * @author t2590pk
 *
 */
public class JSONWrapper {
    public Gson gson = new Gson();

    private String identifier;

    private String label;

    private String items;

    private List listItems = new ArrayList();

    public String getIdentifier() {
        return identifier;
    }

    public void setIdentifier(String identifier) {
        this.identifier = identifier;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }

    public String getItems() {
        return items;
    }

    public void setItems(String items) {
        this.items = items;
    }

    public List getListItems() {
        return listItems;
    }

    public void setListItems(List listItems) {
        this.listItems = listItems;
    }

    /**
     * 
     */
    public JSONWrapper() {
        System.out.println("Calling JSON wrapper constructor.");
    }   

}

谢谢.. :)

2 个答案:

答案 0 :(得分:1)

您可以使用google Gson软件包,如下所示

import com.google.gson.Gson;

String json = "{\"name\":\"ABC\",\"address\":\"some address\"}";
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);

public class Person{
   public String name;
   public String address;
}

注意:您必须为Person类实现默认构造函数和所有getter和setter。 您的案例中的数组将是Set

答案 1 :(得分:0)

你的gson库可能会发生这种情况所以请更新你的gson库并在你使用json时发出jsonException,这将显示代码异常的来源。