Сериализация для JavaScript Apex
Мне нужно сериализовать несколько простых объектов из.NET в JavaScript...
Но у меня есть некоторые проблемы с вершиной...
C# пример
var obj = new { id = 0, label = @"some ""important"" text" };
string json1 = Newtonsoft.Json.JsonConvert.SerializeObject(obj);
string json2 = Newtonsoft.Json.JsonConvert.SerializeObject(obj,
new Newtonsoft.Json.JsonSerializerSettings()
{
StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeHtml
});
Пример JavaScript
var resJson1= JSON.parse('{"id":0,"label":"some \"important\" text"}');
var resJson2= JSON.parse('{"id":0,"label":"some \u0022important\u0022 text"}');
Оба разбора дают мне одну и ту же ошибку
VM517:1 Uncaught SyntaxError: неожиданный токен I в JSON на позиции 23 в JSON.parse (<анонимный>)
Где я не прав?
1 ответ
Вы вставляете сгенерированную строку JSON в строковую константу JavaScript, не экранируя ее дальше. Пытаться
console.log('{"id":0,"label":"some \"important\" text"}');
Вот увидишь {"id":0,"label":"some "important" text"}
т. е. "важные" цитаты больше не экранируются обратными слешами. (И вы получите то же самое для вашего \u0022
Пример тоже.) Если вы хотите вставить в обратную косую черту, вам придется снова избегать их:
var resJson1= JSON.parse('{"id":0,"label":"some \\"important\\" text"}');
JSON, который вы сгенерировали с помощью одной обратной косой черты, был бы хорош, если бы вы читали из файла или URL-адреса, а не вставлялись в JavaScript как строковую константу.