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