В Apex, каков наиболее эффективный способ десериализации строки JSON, предварительно отформатированной с обратной косой чертой? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть класс Apex, который принимает строку JSON, созданную из пользовательского Javascript. Строка JSON выглядит следующим образом (с двойными кавычками в начале и конце):

"[{\"attributes\":{\"type\":\"SBQQ__QuoteLine__c\"},\"SBQQ__Product__c\":\"01t3h000000u7ksAAA\",\"RS__c\":\"<a href=\\\"c__RateSchedule?&quoteId=a0x3h000000Y7zUAAS&quoteLineId=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 ()?

Заранее спасибо.

...