2012-02-15 5 views
5

저는 클라이언트 측에서 Google 시각화 API를 사용하고 있으며 DataTable 객체를 만듭니다. 그런 다음 내 서버에 전달하고 스프레드 시트 API를 통해 스프레드 시트에 업로드하려고합니다. 아마도 가장 좋은 방법은 JSON을 사용하는 것이므로 메서드를 toSSON()으로 변환하고 POST를 통해 내 서버로 보냈습니다. 나는이 두 클래스를 사용하려고 : JavaScript에서 Java로 DataTable 객체 전달

지금 나는이 두 클래스가 호환되지 않는 것을 발견, 적어도 JSON을 통해. 자바 스크립트 클래스는이에 예를 들어 변환 :

{"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)"}]} 
     ] 
} 

그러나 DataTable의 측면 자바는 매개 변수에 대한 다른 이름을 가지고, 나는 다른 종류의 값이 GSON 사용하고 있습니다 :

cols -> columns 
c -> cells 
v -> value 

type:"string" -> type:"TEXT" 
type:"number" -> type:"NUMBER" 

내가 두려워를 더 많은 비 호환성이 있다는 것을

그래서 .. 어떻게 자바 스크립트 DataTable을 자바 객체 DataTable로 변환 할 수 있습니까?

+0

하나의 열에 두 개의 값을 가질 수 있습니까? :) – supertopi

+1

Google의 예제 (JavaScript DataTable의 첫 번째 링크)입니다. 당신 말이 맞아요, 제가 그 모범을 보았습니다. 그러나 그것은 질문의 요점이 아닙니다;) – lmazgon

답변

2

나는 같은 문제가 반대로 나왔다. 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; 
    } 

그러나, 디폴트의 직렬화에 의해 반환 된 자바 DataTable 개체는 자바 스크립트 DataTable에 Google 시각화 API와 같은 것이 아니다. 그것을 GVis 차트에 전달할 수 없습니다.

대신 Java에서 JsonRenderer 클래스 (see this Google Groups email)를 사용하여 겸손 압축을위한 속성 주위에 따옴표가없는 Json 류 문자열로 변환하십시오.

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); 
     ... 
}); 

내가가는 방법을 볼 수 없습니다 :

@Path("/hello/") 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getDataTable() { 
     DataTable data = new DataTable(); 
     CharSequence charSequence = JsonRenderer.renderDataTable(dataTable, true, true); 
     return charSequence.toString(); 
    } 
그 문자열을 괄호로 둘러 싸서 자바 스크립트 구문 분석 할 수

는 예에서 오브젝트 리터럴 표기법 ( see this Google Group forum)에 표시되지 자바 데이터 소스 라이브러리 DataTable 객체에 반대 방향. 그래서 대답은 아니지만 너 혼자가 아니야.

0

글쎄 파이썬을 프론트 엔드에서 사용하고 있으며, 백엔드에서 DataTable을 프론트 엔드로 전달하는 데 문제가 없다. DataTable을 만들 때 백엔드에서 google-visualization-python api을 사용하고 있습니다.
구문 분석은 다음 코드를 사용하여 수행됩니다

DataTable dataTable = DataTable.create(JSONParser.parseLenient(data).isObject().getJavaScriptObject()); 

가 나는 또한 로컬 스토리지에서 JSON 문자열을 저장하는 JSON으로 다시 구문 분석 DataTable의 변환 및 저장 JSON 문자열을 구문 분석도 잘 작동합니다.

GWT에서 DataTable 궁극적으로 단지 나는 그들이 호환되어야하는 이유 어떤 이유가 표시되지 않습니다 JSNI.So를 통해 기본 자바 스크립트 DataTable의 함수를 호출하는 단순한 래퍼입니다.

최신 gwt-visualization API (1.1.2)을 사용하고 있는지 확인하십시오.

+0

아하. DataTable 개체가있는 두 개의 Java 라이브러리가 있습니다. [GWT DataTable] (http://code.google.com/p/gwt-google-apis/source/browse/trunk/visualization/visualization/src/com/google/gwt/ 시각화/클라이언트/DataTable.java? r = 1153) 및 [Java 데이터 소스 라이브러리 DataTable] (http://code.google.com/apis/chart/interactive/docs/dev/dsl_javadocs/com/google/visualization/datasource/ datatable/DataTable.html). GWT DataTable이 Javascript 객체의 직접적인 아날로그 인 것처럼 보이며 데이터 소스 라이브러리는 약간의 노력으로 변환되어야합니다. – prototype

관련 문제