Неожиданный символ при синтаксическом анализе JSON в кодировке .NET с помощью JavaScript

Я разрабатываю приложение веб-страниц ASP.NET и вижу проблему, когда метод Javascript JSON.parse() не может проанализировать выходные данные JSON с помощью метода .NET Json.Encode(). Моя конкретная проблема связана с символом амперсанда (&) (Unicode U+0026).

Например, выполнение этого кода:

object SomeObject = new { SomeProperty = "A&B" };
Response.Write(Json.Encode(SomeObject));

В моем файле .cshtml в ответе появляется следующее содержимое:

{"SomeProperty":"A\u0026B"}

Что приводит к SyntaxError: Unexpected token u в моем JavaScript:

function SomeCallback(aRequest) {
    if (aRequest.status === 200) {
        var lResponseJSON = JSON.parse(aRequest.Response); // Error on this line
    }
}

Как я могу заставить кодировку .NET JSON и декодирование JS JSON работать хорошо, когда задействованы специальные символы?

(Предпочтительно, за исключением ручного просмотра строкового JSON перед его анализом для замены кодировок Unicode)

РЕДАКТИРОВАТЬ: стоит упомянуть, что использование Json.Write(SomeObject, Response.Output) вместо Response.Write(Json.Encode(SomeObject)) не влияет на вывод JSON.


person Bluesky    schedule 20.08.2014    source источник


Ответы (1)


Ваша проблема должна несколько отличаться от того, что вы показываете:

Когда я запускаю этот код через свою консоль:

var k = JSON.parse('{"SomeProperty":"A\u0026B"}')
console.log(k);
// Object {SomeProperty: "A&B"}

все ведет себя правильно.

Хотя это выглядит странно, это правильный JSON:

{"SomeProperty":"A\u0026B"}
person Jeremy J Starcher    schedule 20.08.2014
comment
Консоль разработчика показывает: aRequest: XMLHttpRequest response: {SomeProperty:A&B} Как содержимое моего ответа. - person Bluesky; 20.08.2014
comment
Изображения для ясности: Ошибка: i.imgur.com/8ySmAxX.png Содержимое объекта: i.imgur.com/NVrolxT.png - person Bluesky; 20.08.2014