反序列化从Server返回的JSON(包含HashMap)

时间:2010-11-12 14:52:07

标签: java json gwt

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

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?

谢谢, 萨钦

3 个答案:

答案 0 :(得分:1)

我不确定你要做的是正确的做事方式,但如果你真的想从JSON反序列化,你可以使用杰克逊:

http://jackson.codehaus.org/

答案 1 :(得分: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可能更容易。

答案 2 :(得分:0)

如果您使用gwt作为标记,那么您为什么要自己做JSON? GWT具有很好的序列化支持。