Обратная косая черта в строке JSON - PullRequest
4 голосов
/ 10 ноября 2010

Я не знаком с этим форматом:

{"d":"{\"Table\":[{\"pCol\":12345,\"fCol\":\"jeff\",\"lCol\":\"Smith\",\"dId\":1111111,\"tDate\":\"\\/Date(1153033200000-0700)\\/\"}]}"}

Я использую Newtonsoft для сериализации моего DataSet, который я возвращаю из моего веб-сервиса ASP.Net. Приведенная выше строка JSON - это то, что возвращает Firebug. Я проверил этот JSON с помощью jsLint, и это хорошо.

В firebug я вижу данные JSON и мои первые alert('success'); Однако, когда я пытаюсь alert(msg.d.Table);, я ничего не получаю. Не окно предупреждения или ошибка в Firebug ... Я думаю, что это как-то связано с этими обратными слешами ... Но я не уверен.

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 10 ноября 2010

Эти обратные слэши являются escape-символами. Они избегают двойных кавычек внутри строки, связанной с d. Причина, по которой вы не можете alert msg.d.Table, заключается в том, что значение d является строкой. Вы должны использовать JSON.parse для разбора этой строки JSON в объект JSON. Затем вы должны преобразовать Table обратно в строку, чтобы предупредить ее. Примерно так:

var dObj = JSON.parse(msg.d);
alert(JSON.stringify(dObj.Table, null, 2)); 
3 голосов
/ 10 ноября 2010

Веб-служба ASP.Net уже сериализует возвращаемое значение в JSON. (в d свойстве по соображениям безопасности)

Когда вы возвращаете предварительно сериализованные данные JSON, он думает, что вы даете ему нормальную строку, и приступает к сериализации строки как JSON.

Таким образом, вы получаете объект JSON со свойством d, которое содержит необработанную строку JSON (с правильно экранированными кавычками), которую вы вернули.

Вы должны вернуть необработанный объект и позволить ASP.Net его сериализовать вместо вас, а не самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...