如何使用JsonpRequestBuilder获取JSON字符串

时间:2011-05-04 02:01:45

标签: gwt jsonp

我正在使用GWT的JsonpRequestBuilder发出一个跨站点REST请求,其响应是一个JSON对象。

requestObject方法的回调参数是一个JavaScriptObject。 但我不想实现JavaScriptObject,而是直接解析JSON响应。无论如何我可以直接从JavaScriptObject或JsonpRequestBuilder的任何方法获取JSON字符串吗?

3 个答案:

答案 0 :(得分:6)

如果你想使用com.google.gwt.json.JSON模块(说真的,你最好写JavaScriptObject,这个JSON模块是一个可以使用的PITA),那么你可以简单地包装返回的{{} 1}}成JavaScriptObjectJSONObject

JSONArray

答案 1 :(得分:1)

使用requestString而不是requestObject。像这样:

JsonpRequestBuilder jsonp = new JsonpRequestBuilder();
jsonp.requestString(url,
     new AsyncCallback<String>() { ...

这将返回String而不是JavaScriptObject。您可以使用JSONParser,如下所示:

JSONObject value = (JSONObject)JSONParser.parseStrict(jsonString);

Person person = new Person();
person.setName(value.get("Name").isString().stringValue());

答案 2 :(得分:1)

@Gu 尝试在生成的json中转义引号。例如,在服务器端代码中放置

    json = json.replace( "\"", "\\\"" )

如下所示包装结果字符串:

    String jsonCallback = request.getParameter("jsonpcallback") //or any other name
    StringBuilder response = new StringBuilder();
    responseBody.append( jsonCallback ).append( "(\"" ).append( json ).append( "\");");

此代码适用于客户端:

    JsonpRequestBuilder jsonp = new JsonpRequestBuilder();
    jsonp.setCallbackParam("jsonpcallback");
    jsonp.requestString(....);

P.S。抱歉。没有足够的分数只是评论已给出答案。