Сериализация для 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 как строковую константу.

Другие вопросы по тегам