我正在使用GWT的JsonpRequestBuilder发出一个跨站点REST请求,其响应是一个JSON对象。
requestObject方法的回调参数是一个JavaScriptObject。 但我不想实现JavaScriptObject,而是直接解析JSON响应。无论如何我可以直接从JavaScriptObject或JsonpRequestBuilder的任何方法获取JSON字符串吗?
答案 0 :(得分:6)
如果你想使用com.google.gwt.json.JSON
模块(说真的,你最好写JavaScriptObject
,这个JSON模块是一个可以使用的PITA),那么你可以简单地包装返回的{{} 1}}成JavaScriptObject
或JSONObject
:
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。抱歉。没有足够的分数只是评论已给出答案。