2012-02-29 4 views
8

プロジェクトでは、複雑なJSONコマンドをサーバーからクライアントに送信する必要があります。 JSONObjects(Strings、Numbersなど)を生成して文字列に変換し、RequestBuilder経由で送信するか、より効果的なメソッドがありますか?クライアントでJSONをGenearteにする方法

は(オブジェクト上の.toStringメソッドを介して)文字列に

コード例をJSONオブジェクトに変換することが効果的である:

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()); 

は出力:

{"NumberVar":1, "StringVar":"HelloWorld", "EventParameters":["Array","Array","Array","Array","Array"]} 

よろしく、 ステファン

答えて

9

あなたが持っている解決策は効果があります。あなたは、また

private static native String stringify(JavaScriptObject jso) /*-{ 
    return JSON.stringify(jso); 
}-*/; 

あなたがより効率的にそれをやってみたい、とあなただけのJSON.stringify()をサポートする最新のブラウザをサポートしたい場合は、JSONObjectsの代わりにJavaScriptObjectsで作業し、このネイティブメソッドを使用することができます実行してJSOを文字列化することができる:

String json = new JSONObject(jso).toString(); 
JavaScriptObject

の間、彼らは、JSオブジェクトとして、最終的なコンパイルされたコードで表現されるため、より効率的であるJSONObjectは、エミュレートされたJavaオブジェクトとして表されます。 2番目のソリューションは、JSOを構築する間にオーバーヘッドが少なくなることを意味しますが、文字列化するときには最初のものよりも比較的多くなります。

解決策はうまくいくはずです。

+0

感謝、それ以上のことは私が尋ねた^^ – Stefan

3

AutoBeansもあります。あなたのJSONのプロパティ名が(小文字nで)getNumberVar()numberVarプロパティを取得します(Javaの豆のものに触発さ)AutoBean規則、と整列しないよう@PropertyNameが必要とされている

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()); 

がある

+0

ありがとう、別のことを見てみる必要があります。 – Stefan

関連する問題