如何在GWT中解析复杂的json?

时间:2011-08-20 02:52:42

标签: json gwt

我知道如何解析简单的json,但不知道如何解析更复杂的json(数组包含另一个数组)。

示例json字符串: [{“linkID”:“101030”,“connectingPoints”:[[37.7888,-122.388],[37.803918106204456,-122.36559391021729],[37.8107,-122.364]]},{“linkID”:“101040”,“connectingPoints”日期null}]

我的jsni:

public class LinkDefinition extends JavaScriptObject
{
    protected LinkDefinition()
    {
    }

    public final native String getLinkID()
    /*-{
        return this.linkID;
    }-*/;

    public final native JsArray<LatLon> getConnectingPoints()
    /*-{
        return this.connectingPoints;
    }-*/;
}

public class LatLon extends JavaScriptObject
{
    public final int LAT = 0;
    public final int LON = 1;

    protected LatLon()
    {   
    }

    public final native double getLat()
    /*-{
        return this[LAT}; // edited
    }-*/;

    public final native double getLon()
    /*-{
        return this[LON]; // edited
    }-*/;
}

现在我收到了错误消息

  

[错误] [MyProj] - 第x行:无法使用实例字段   JavaScriptObject的子类

3 个答案:

答案 0 :(得分:2)

您可以阅读有关JavaScriptObject限制的文档... http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/doc/helpInfo/jsoRestrictions.html

否则,托马斯所说的一切。主要错误是public final int fiels(完全按照他的建议将它们更改为静态)

答案 1 :(得分:1)

错误来自public final int中的LatLon字段。将它们更改为static以将它们变为常量并修复错误。

您的代码中也存在问题getLatgetLon返回this而不是this[0]this[1](或this[@packageOf.LatLon::LAT]this[@packageOf.LatLon::LON]

答案 2 :(得分:0)

您还可以解析JSON字符串和访问字段,而不是使用叠加层。您可以使用com.google.gwt.json.client.JSONParser执行此操作。它有两种方法

  1. parseLenient(),如果您确定不会注入任何JS代码(例如,来自您的服务器),您应该使用它。
  2. parseStrict()速度较慢,但​​对代码注入有抵抗力