得到JSON字符串我使用GWT的JsonpRequestBuilder發出跨站REST請求其響應是一個JSON對象。如何使用JsonpRequestBuilder
requestObject方法的回調參數是JavaScriptObject。 但我不希望實現JavaScriptObject,而是直接解析JSON響應。反正我有可以直接從JavaScriptObject或JsonpRequestBuilder的任何方法獲得的JSON字符串?
得到JSON字符串我使用GWT的JsonpRequestBuilder發出跨站REST請求其響應是一個JSON對象。如何使用JsonpRequestBuilder
requestObject方法的回調參數是JavaScriptObject。 但我不希望實現JavaScriptObject,而是直接解析JSON響應。反正我有可以直接從JavaScriptObject或JsonpRequestBuilder的任何方法獲得的JSON字符串?
如果你想使用com.google.gwt.json.JSON
模塊(嚴重的是,你最好是寫JavaScriptObject
S,這JSON模塊是一個PITA一起工作),那麼你可以簡單地包裹返回JavaScriptObject
成JSONObject
或JSONArray
:
new JSONObject(myJavaScriptObject)
使用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());
當我試圖AsyncCallback的
同樣,我無法獲得此版本的工作。在Firefox中,我得到了classcastexception。 – user291701 2012-11-26 03:18:54
您使用'requestString()'當服務器返回一個字符串(例如' '{ 「名」: 「布拉德」}'' - 注意撇號)。如果服務器返回一個JavaScript對象(例如一個合適的JSON值,如'{「名」:「布拉德」}'),你需要使用'requestObject()'。使用錯誤的將導致ClassCastException。 – Attila 2013-07-30 02:01:41
@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(....);
附:抱歉。沒有足夠的觀點來評論已經給出的答案。
這適用於我,正是我想要的,謝謝!我希望我有足夠的聲望給你一票。 – 2011-05-05 02:25:24