将DataTable对象从JavaScript传递到Java
我在客户端使用Google可视化API,创建了一个DataTable对象。然后我想将其传递到我的服务器,并通过电子表格API将其上传到电子表格中。也许最好的方法是使用JSON,所以我用方法toJSON()将其转换,并通过POST发送到我的服务器。我尝试使用这两个类:将DataTable对象从JavaScript传递到Java,java,javascript,json,google-api,google-visualization,Java,Javascript,Json,Google Api,Google Visualization,我在客户端使用Google可视化API,创建了一个DataTable对象。然后我想将其传递到我的服务器,并通过电子表格API将其上传到电子表格中。也许最好的方法是使用JSON,所以我用方法toJSON()将其转换,并通过POST发送到我的服务器。我尝试使用这两个类: 现在我注意到,这两个类不兼容,至少在JSON上不兼容。例如,JavaScript类将转换为: {"cols":[ {"id":"Col1","label":"","type":"string"}
{"cols":[
{"id":"Col1","label":"","type":"string"}
{"id":"Col2","label":"","type":"date"}
],
"rows":[
{"c":[{"v":"a"},{"v":"Date(2010,10,6)"}]},
{"c":[{"v":"b"},{"v":"Date(2010,10,7)"}]}
]
}
但是Java端数据表的参数名称不同,我使用的Gson具有不同的类型值:
cols -> columns
c -> cells
v -> value
type:"string" -> type:"TEXT"
type:"number" -> type:"NUMBER"
恐怕还有更多的不兼容之处
所以。。如何将JavaScript数据表转换为Java对象数据表?我遇到了同样的问题。Java数据源库中的DataTable对象似乎与Google可视化API中的Javascript DataTable对象不平行 返回Java数据源库DataTable对象需要使用JsonRenderer,而不是默认序列化。而且它似乎只能从服务器传递到客户机。我不确定是否可以从另一个方向进行
@WebService
@Path("/tables")
public class DataManager extends GenericManager<db, Long> {
@Path("/hello/")
@GET
@Produces(MediaType.APPLICATION_JSON)
public DataTable getDataTable() {
DataTable data = new DataTable();
... populate object ...
return data;
}
该字符串可以通过在Javascript中用括号括起来进行解析,而不是在示例()中的对象文字表示法中显示:
我没有看到与Java数据源库DataTable对象相反的方法。
因此,这不是一个很好的答案,但并非只有你一个人我在后端使用python,在前端使用GWT,并将数据表从后端传递到前端,没有任何问题。 我正在使用后端上的创建数据表。
解析使用以下代码完成:
DataTable dataTable = DataTable.create(JSONParser.parseLenient(data).isObject().getJavaScriptObject());
我还将解析后的数据表转换回JSON,以将JSON字符串存储在localStorage中,并且解析存储的JSON字符串也可以正常工作
GWTDataTable
只是一个简单的包装器,它最终只是通过JSNI调用底层JavascriptDataTable
的函数。所以我看不出它们为什么不兼容
确保使用最新版本(1.1.2) 一列中可以有两个值吗?:)这只是谷歌的一个例子(JavaScript数据表的第一个链接)。你说得对,我纠正了这个例子,但这不是问题的重点;)啊哈。有两个带有DataTable对象的Java库:和。看起来gwtdatatable是Javascript对象的直接模拟,数据源库需要稍加转换。
jQuery.ajax({
context: this,
type: 'Get',
url: url,
success: function(data) {
var args = eval('('+data+')'); // add parens around the returned string
var dataTable = new google.visualization.DataTable(args);
...
});
DataTable dataTable = DataTable.create(JSONParser.parseLenient(data).isObject().getJavaScriptObject());