将DataTable对象从JavaScript传递到Java

将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"}

我在客户端使用Google可视化API,创建了一个DataTable对象。然后我想将其传递到我的服务器,并通过电子表格API将其上传到电子表格中。也许最好的方法是使用JSON,所以我用方法toJSON()将其转换,并通过POST发送到我的服务器。我尝试使用这两个类:

现在我注意到,这两个类不兼容,至少在JSON上不兼容。例如,JavaScript类将转换为:

{"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字符串也可以正常工作

GWT
DataTable
只是一个简单的包装器,它最终只是通过JSNI调用底层Javascript
DataTable
的函数。所以我看不出它们为什么不兼容


确保使用最新版本(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());