我正在阅读链接:http://www.gwtproject.org/doc/latest/tutorial/JSON.html并发现JSNI和overlay类型用于解码来自服务器端的JSON数据。
// Send request to server and catch any errors.
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
try {
Request request = builder.sendRequest(null, new RequestCallback() {
public void onError(Request request, Throwable exception) {
displayError("Couldn't retrieve JSON");
}
public void onResponseReceived(Request request, Response response) {
if (200 == response.getStatusCode()) {
updateTable(JsonUtils.<JsArray<StockData>>safeEval(response.getText()));
} else {
displayError("Couldn't retrieve JSON (" + response.getStatusText()
+ ")");
}
}
});
} catch (RequestException e) {
displayError("Couldn't retrieve JSON");
}
为什么它使用JsonUtils。&gt; safeEval(response.getText())来解码JSON数据?它必须这样做吗?这是使用GWT时接收JSON数据的唯一方法吗?
答案 0 :(得分:1)
不,这不是唯一的方法。但是,JsonUtils.safeEval将使用浏览器的内置(即本机,因此被假定为最快的方式)JSON.parse()
(有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) ,它会将JSON字符串转换为JavaScript对象。
反过来,覆盖类型允许您编写直接映射到JavaScript对象的Java代码,从而使您可以从普通的Java代码中轻松,轻松地讨论底层JS数据。
当然还有其他选项,在我的脑海中,你可以在JSONObject
包中使用com.google.gwt.json.client
类 - 这仍然可以进行JSON.parse()
调用,但是通过类似于映射和列表的Java代码结构公开数据。此外,AutoBeans可以声明描述数据结构的接口,并从JSON字符串(或JavaScript对象)读取到这些接口中 - 它使您的代码更像Java,内置集合等等,一些表演来回转换的成本。