У меня есть класс Apex, который принимает строку JSON, созданную из пользовательского Javascript. Строка JSON выглядит следующим образом (с двойными кавычками в начале и конце):
"[{\"attributes\":{\"type\":\"SBQQ__QuoteLine__c\"},\"SBQQ__Product__c\":\"01t3h000000u7ksAAA\",\"RS__c\":\"<a href=\\\"c__RateSchedule?"eId=a0x3h000000Y7zUAAS"eLineId=null\\\" target=\\\"_self\\\"><img src=\\\"/img/samples/flag_green.gif\\\" alt=\\\"RS\\\" border=\\\"0\\\"></a>\"}]"
Обратите внимание на экранированные символы в этой строке. Без предварительного форматирования строки следующая строка Apex завершается неудачно при попытке десериализации строки выше (предположим, что для переменной jsonStringWithoutFormatting ниже задана строка выше):
List<SBQQ__QuoteLine__c> lines = (List<SBQQ__QuoteLine__c>)JSON.deserialize(jsonStringWithoutFormatting, List<SBQQ__QuoteLine__c>.class);
Однако, следующий код работает без ошибок:
String jsonStringFormatted= jsonStringWithoutFormatting.replace('\\"', '"');
jsonStringFormatted = postBody.replace('"{', '{');
jsonStringFormatted = postBody.replace('}"', '}');
jsonStringFormatted = postBody.removeStart('"');
jsonStringFormatted = postBody.removeEnd('"');
jsonStringFormatted = postBody.replace('\\\"', '"');
List<SBQQ__QuoteLine__c> lines = (List<SBQQ__QuoteLine__c>)JSON.deserialize(jsonStringFormatted, List<SBQQ__QuoteLine__c>.class);
Есть ли более эффективный способ сделать это, предпочтительно встроенный, без использования метода String.replace ()?
Заранее спасибо.