2012-07-11 46 views
1

我想通過轉換Http請求正文中的blob來嘗試在salesforce中接收JSON字符串。但是,當我將blob轉換爲字符串時,會有\字符插入到請求中,從而導致我無法解析。在salesforce中接收JSON

然後我試着去掉字符串,並刪除所有\字符......也沒有工作。

RestRequest req = RestContext.request; 
    Blob jsonBlob = req.requestBody; 
    String jsonString = jsonBlob.toString(); 
    return jsonString; 

原始字符串(即收爲BLOB的)看起來像這樣:

{"putTimeCard":{"timecard":{"timeCardID": "","employeeID": ""}} 

,並轉換到Salesforce的字符串並分配給jsonString後變更爲:

{\"putTimeCard\":{\"timecard\":{\"timeCardID\": \"\",\"employeeID\": \"\"}} 

有沒有人找到這個解決方案? 謝謝

+0

我認爲調用JSON.deserialize將unencode你jsonString。 – 2012-07-11 15:17:44

+0

將它反序列化爲一個對象嗎? – thebiglebowski11 2012-07-11 16:25:12

+0

是的,你需要通過該類,請參閱官方文檔:http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_json.htm – 2012-07-11 17:19:53

回答

1

JSON解串器可以用轉義字符解析字符串。您可以反序列化到一個對象,像這樣:

String jsonString = '{\"putTimeCard\":{\"timecard\":{\"timeCardID\": \"\",\"employeeID\": \"\"}}}' 
Timecard t = (Timecard) JSON.deserialize(jsonString, Type.forName('Timecard')); 

,或者如果你只是想圖的對象,你可以做到以下幾點:

String jsonString = '{\"putTimeCard\":{\"timecard\":{\"timeCardID\": \"\",\"employeeID\": \"\"}}}' 
Map<String, Object> m = (Map<String, Object>) JSON.deserializeUntyped(jsonString); 
+0

我試過這種方法,但我總是得到「message」:「System.NullPointerException:嘗試解除引用空對象\ n \ n(系統代碼)\ nClass.mobile_Timecard.putTimecard:第75行,第1列」, 「errorCode」:「APEX_ERROR」其中第75行是我嘗試反序列化的行......自定義對象是否必須完美鏡像? – thebiglebowski11 2012-07-12 18:47:47

+0

你能發佈相關的代碼嗎?這聽起來不像JSON解析器的錯誤。 我已經測試了匿名apex中的第二種方法,它絕對有效。 – 2012-07-13 13:34:09

+0

感謝您的代碼,它幫助我反序列化JSON而不創建數據對象。在這之後,如果你想要數據值,你可以這樣做: Map putTimeCard =(Map )m.get('timecard');' 'String timeCardID =(String)timecard.get('timeCardID');'' – zeta 2016-05-14 00:20:18