2011-05-04 14 views
4

得到JSON字符串我使用GWT的JsonpRequestBuilder發出跨站REST請求其響應是一個JSON對象。如何使用JsonpRequestBuilder

requestObject方法的回調參數是JavaScriptObject。 但我不希望實現JavaScriptObject,而是直接解析JSON響應。反正我有可以直接從JavaScriptObject或JsonpRequestBuilder的任何方法獲得的JSON字符串?

回答

6

如果你想使用com.google.gwt.json.JSON模塊(嚴重的是,你最好是寫JavaScriptObject S,這JSON模塊是一個PITA一起工作),那麼你可以簡單地包裹返回JavaScriptObjectJSONObjectJSONArray

new JSONObject(myJavaScriptObject) 
+1

這適用於我,正是我想要的,謝謝!我希望我有足夠的聲望給你一票。 – 2011-05-05 02:25:24

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()); 
+0

當我試圖AsyncCallback的代替的AsyncCallback ,我不能得到回調的onSuccess或onFailure處被調用。 – 2011-05-05 02:23:52

+0

同樣,我無法獲得此版本的工作。在Firefox中,我得到了classcastexception。 – user291701 2012-11-26 03:18:54

+2

您使用'requestString()'當服務器返回一個字符串(例如' '{ 「名」: 「布拉德」}'' - 注意撇號)。如果服務器返回一個JavaScript對象(例如一個合適的JSON值,如'{「名」:「布拉德」}'),你需要使用'requestObject()'。使用錯誤的將導致ClassCastException。 – Attila 2013-07-30 02:01:41

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(....); 

附:抱歉。沒有足夠的觀點來評論已經給出的答案。