2012-07-11 3 views
1

Http 요청의 본문에있는 blob을 변환하여 salesforce에서 JSON 문자열을 받으려고합니다. 그러나 BLOB을 문자열로 변환 할 때 요청에 삽입되는 \ 문자가있어 구문 분석을 방해합니다.salesforce에서 JSON 수신

그런 다음 문자열을 가져 와서 모든 \ 문자를 제거하려고했는데 ... 역시 작동하지 않았습니다.

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

그리고 Salesforce의 문자열로 변환하고 jsonString 할당 후

가 변경된다

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

원래 문자열 (BLOB으로 수신 한)는 다음과 같다

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

누군가가 해결책을 찾았습니까? 감사합니다.

+0

나는 전화 JSON.deserialize이 jsonString를 decode합니다 것이라고 생각합니다. –

+0

개체로 deserialize 할 것인가? – thebiglebowski11

+0

예, 클래스를 전달해야합니다. 공식 문서를 참조하십시오. http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_methods_system_json.htm –

답변

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 : null 객체의 참조 해제 시도 \ n \ n (시스템 코드) \ nClass.mobile_Timecard.putTimecard : line 75, column 1", "errorCode": "APEX_ERROR"여기서 75 행 deserialize하려고 시도하는 선입니다 ... 사용자 지정 개체가 완벽하게 미러링해야합니까? – thebiglebowski11

+0

관련 코드를 게시 할 수 있습니까? 그것은 JSON 구문 분석기의 오류와 같은 소리는 아닙니다. 익명의 정점에서 두 번째 방법을 테스트 한 결과, 분명히 작동합니다. –

+0

코드를 보내 주셔서 감사합니다. 데이터 개체를 만들지 않고도 JSON을 deserialize 할 수있었습니다. 데이터 값을 원할 경우 'Map putTimeCard = (Map ) m.get ('putTimeCard'); ''Map timecard = (Map ) m.get ('timecard'); – zeta

관련 문제