Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在客户端上生成JSON_Json_Gwt - Fatal编程技术网

如何在客户端上生成JSON

如何在客户端上生成JSON,json,gwt,Json,Gwt,在这个项目中,我必须从服务器向客户端发送复杂的JSON命令。生成JSONObject(字符串、数字等)是否有效?将它们转换为字符串,然后通过RequestBuilder发送它们?是否有更有效的方法 将JSON对象转换为字符串是否有效(通过对象上的.toString方法) 代码示例: JSONObject retObject = new JSONObject(); retObject.put("NumberVar", new JSONNumber(1)); retObjec

在这个项目中,我必须从服务器向客户端发送复杂的JSON命令。生成JSONObject(字符串、数字等)是否有效?将它们转换为字符串,然后通过RequestBuilder发送它们?是否有更有效的方法

将JSON对象转换为字符串是否有效(通过对象上的.toString方法)

代码示例:

    JSONObject retObject = new JSONObject();
    retObject.put("NumberVar", new JSONNumber(1));
    retObject.put("StringVar", new JSONString("HelloWorld"));

    JSONArray arrayVar= new JSONArray();
    for (int i = 0; i < 5; i++) {
        arrayVar.set(i,
                new JSONString("Array"));
    }
    retObject.put("EventParameters", arrayVar);

    System.out.println(retObject.toString());
问候,,
Stefan

您的解决方案将起作用

如果您想更高效地执行此操作,并且只想支持支持支持
JSON.stringify()
的现代浏览器,则可以使用
JavaScriptObjects
而不是
JSONObject
,并使用此本机方法:

private static native String stringify(JavaScriptObject jso) /*-{
  return JSON.stringify(jso);
}-*/;
或者,您可以通过执行以下操作将JSO字符串化:

String json = new JSONObject(jso).toString();
JavaScriptObject
s效率更高,因为它们在最终编译的代码中表示为JS对象,而
JSONObject
s表示为模拟Java对象。第二种解决方案意味着在构建JSO时开销更少,但在将其字符串化时开销相对更大(比第一种)

不过,您的解决方案会很好地工作。

还有一个问题。

公共接口MyJsonFactory扩展了AutoBeanFactory{
自动bean myJsonObj();
}
公共接口MyJsonObj{
@PropertyName(“NumberVar”)
int getNumberVar();
@PropertyName(“NumberVar”)
void setNumberVar(int val);
@PropertyName(“StringVar”)
字符串getStringVar();
@PropertyName(“StringVar”)
无效设置字符串VAR(字符串val);
@PropertyName(“EventParameters”)
列出getEventParameters();
@PropertyName(“EventParameters”)
void setEventParameters(列表值);
}
MyJsonFactory=GWT.create(MyJsonFactory.class);
AutoBean=factory.myJsonObj();
MyJsonObj=bean.as();
//bean和obj是完全相同数据上的两个不同视图
对象设置编号(1);
对象setStringVar(“HelloWorld”);
列表=新的ArrayList(5);
对于(int i=0;i<5;i++){
添加(“数组”);
}
对象setEventParameters(列表);
System.out.println(AutoBeanCodex.encode(bean.getPayload());
之所以需要
@PropertyName
,是因为您的JSON属性名称不符合AutoBean约定(受Java Beans的启发),其中
getNumberVar()
获取
numberVar
属性(小写
n

String json = new JSONObject(jso).toString();
public interface MyJsonFactory extends AutoBeanFactory {
   AutoBean<MyJsonObj> myJsonObj();
}

public interface MyJsonObj {
   @PropertyName("NumberVar")
   int getNumberVar();
   @PropertyName("NumberVar")
   void setNumberVar(int val);

   @PropertyName("StringVar")
   String getStringVar();
   @PropertyName("StringVar")
   void setStringVar(String val);

   @PropertyName("EventParameters")
   List<String> getEventParameters();
   @PropertyName("EventParameters")
   void setEventParameters(List<String> val);
}

MyJsonFactory factory = GWT.create(MyJsonFactory.class);
AutoBean<MyJsonObj> bean = factory.myJsonObj();
MyJsonObj obj = bean.as();
// bean and obj are 2 distinct view on the exact same data
obj.setNumberVar(1);
obj.setStringVar("HelloWorld");
List<String> list = new ArrayList<String>(5);
for (int i = 0; i < 5; i++) {
   list.add("Array");
}
obj.setEventParameters(list);
System.out.println(AutoBeanCodex.encode(bean).getPayload());