我知道如何解析简单的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的子类
答案 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
以将它们变为常量并修复错误。
您的代码中也存在问题getLat
和getLon
返回this
而不是this[0]
和this[1]
(或this[@packageOf.LatLon::LAT]
和this[@packageOf.LatLon::LON]
)
答案 2 :(得分:0)
您还可以解析JSON字符串和访问字段,而不是使用叠加层。您可以使用com.google.gwt.json.client.JSONParser
执行此操作。它有两种方法
parseLenient()
,如果您确定不会注入任何JS代码(例如,来自您的服务器),您应该使用它。parseStrict()
速度较慢,但对代码注入有抵抗力