Javascript GWT-如何将Json作为基元类型返回

Javascript GWT-如何将Json作为基元类型返回,javascript,gwt,getjson,jsni,Javascript,Gwt,Getjson,Jsni,我需要从json中获取值。它可以完美地处理返回的对象,但有时我只得到类似于json值的布尔值。我无法从GWT中返回的json中获取它 我有JSNI函数getJson(),用于检索json,与GWT教程StockWatcher相同。我想这是函数的相关部分,返回的字符串被转换成JavaScriptObject // [2] Define the callback function on the window object. window[callback] = functio

我需要从json中获取值。它可以完美地处理返回的对象,但有时我只得到类似于json值的布尔值。我无法从GWT中返回的json中获取它

我有JSNI函数getJson(),用于检索json,与GWT教程StockWatcher相同。我想这是函数的相关部分,返回的字符串被转换成JavaScriptObject

    // [2] Define the callback function on the window object.
        window[callback] = function(jsonObj) {
            // [3]
            handler.@cz.metacentrum.perun.webgui.json.JsonClient::handleJsonResponse(Lcom/google/gwt/core/client/JavaScriptObject;)(jsonObj);
            window[callback + "done"] = true;
        }
    // [4] JSON download has a timeout.
        setTimeout(
                function() {
                    if (!window[callback + "done"]) {
                        handler.@cz.metacentrum.perun.webgui.json.JsonClient::handleJsonResponse(Lcom/google/gwt/core/client/JavaScriptObject;)(null);
                    }

                    // [5] Cleanup. Remove script and callback elements.
                    document.body.removeChild(script);
                    delete window[callback];
                    delete window[callback + "done"];
                }, timeout);
它调用处理函数,该函数也是基于教程的

    public void handleJsonResponse(JavaScriptObject jso){
    // if an ERROR
    if (jso == null) {
        this.module.onError();
        return;
    }
    // OK
    this.module.onFinished(jso);
}
问题是。当我收到布尔值时,它不会被解析为JavaScriptObject,并且由于超时,我最终会进入onError()

返回的json字符串如下所示:callback5(true);它在超时之前返回了很长时间。所以我认为getJson()就是不能解析它

如何将其解析为JavaScriptObject以与程序的其余部分一起工作?我想我需要getJson()第[3]节中的一些IF语句来决定调用什么处理程序函数返回的值类型。也许可以从这里返回的值手动创建对象,然后将其传递给现有的处理程序。但我不知道如何正确地做。 我试图为boolean创建OverlyType,但没有帮助,因为返回的字符串无论如何都不会解析为jso


感谢您的帮助。

裸基元类型不是有效的JSON。JSON字符串()必须是JavaScript对象或数组。如果您无法更改原始类型所来自的服务,则可以填充包含原始类型的字符串,以便将其解析(到单个元素数组中):

function padPrimitiveType(json) {
  if (json != null && json[0] != '[' && json[0] != '{') {
    return "[" + json + "]";
  } else {
    return json;
  }
}