2010-11-12 69 views
2

我正在使用gwt客戶端。我需要解析/反序列化從服務器返回的JSON(包含Map)。示例JSON: -Deseralize從服務器返回的JSON(包含HashMap)

APPLICATIONSMAP: { 

* 
    - 
    0: { 
     o name: "App 1" 
     o id: 0 
    } 
* 
    - 
    1: { 
     o name: "App 2" 
     o id: 1 
    } 
* 
    - 
    2: { 
     o name: "App 3" 
     o id: 2 
    } 

如何反序列化JSON回到Java HashMap?

感謝, 薩欽

+1

您使用Google GSon嗎? http://code.google.com/p/google-gson/ – 2010-11-12 14:58:45

回答

0

如果您使用GWT的標籤說,那你爲什麼不自己JSON? GWT有很好的序列化支持。

+0

我不確定我是否可以在不使用GWT RPC的情況下使用GWT序列化。如果可以,請給我發送鏈接以瞭解它是如何工作的。我們沒有使用GWT RPC。我們有一個Spring MVC webapp,它將數據作爲JSON返回給GWT客戶端。 – Sachin 2010-11-12 15:08:02

1

我不知道你想要做的是做事情的正確方法,但如果你真的想從JSON反序列化,你可以使用傑克遜:

http://jackson.codehaus.org/

+0

我有一個GWT客戶端和Spring MVC應用程序。 GWT應用程序向SPRING MVC發送HTTP請求並獲取數據作爲JSON Response.I需要解析JSON字符串以創建HashMap。希望這可以幫助。我不能在GWT客戶端中使用傑克遜,因爲GWT將無法將傑克遜類轉換爲JavaScript代碼。 – Sachin 2010-11-12 15:17:10

+1

爲什麼要通過Java JSON處理器將JSON轉換爲JavaScript代碼? JSON可以在Javascript中閱讀,沒有任何問題。有一些不清楚的地方,我想。 – 2010-11-12 15:39:09

+0

我正在使用Google網絡工具包(GWT)創建GUI並處理JSON。 GWT允許你用Java編寫代碼。 GWT編譯器將Java代碼編譯/轉換成Javascript/Html。因此需要解析Java中的JSON。 – Sachin 2010-11-18 10:21:21

1

你可以嘗試JavaScript Overlay Types,例如像這樣:

public class OverlayExample implements EntryPoint { 

    public static final class MyJsMap extends JavaScriptObject { 

     protected MyJsMap() {} 

     public native Object get(Object key) /*-{ 
      return this[key]; 
     }-*/; 

     public native void put(Object key, Object val) /*-{ 
      this[key] = val; 
     }-*/; 
    } 

    public void onModuleLoad() { 

     final String text = "[{ 1 : 'x', 2 : 'y' }]"; 
     final MyJsMap map = asJsMap(text); 
     System.out.println(map.get("1")); 
    } 

    private static native MyJsMap asJsMap(final String str) /*-{ 
     return eval(str)[0]; 
    }-*/; 
} 

好吧,這不完全是java.util.Map,但如果你需要,你可以提高MyJsMap實現java.util.Map接口。

或者 - 如果您需要真正的java.util.HashMap - 您可以迭代所有值並將它們複製到HashMap。在後一種情況下,根據@The Elite Gentleman的建議,使用GSON可能更容易。

+0

我會看看第一個選項。 – Sachin 2010-11-18 10:22:39