Возвращенный JQuery/.NET Core JSON не может быть проанализирован

Это то, что я отправляю на свой контроллер:

"[{\"PropertyName\":\"fewfewf\",\"Key\":\"ewgwewe\",\"PrimaryValue\":\"\",\"SecondaryValue\":\"\",\"TertiaryValue\":\"\",\"MinimumValue\":\"\",\"MaximumValue\":\"\"},{\"PropertyName\":\"rwhjyjut\",\"Key\":\"jtyjyt\",\"PrimaryValue\":\"\",\"SecondaryValue\":\"\",\"TertiaryValue\":\"\",\"MinimumValue\":\"\",\"MaximumValue\":\"\"}]"

Это то, что я получаю от сервера после повторного анализа и сериализации.

Возвращенный JQuery/.NET Core JSON не может быть проанализирован Я очень смущен, так как ничего не менял. Когда я пытаюсь разобрать его на стороне Jquery, я получаю эту ошибку:

Uncaught SyntaxError: Unexpected token & in JSON at position 2

Это код jquery

if ("@Model.FormPropertiesList".length !== 0) {
    console.info($.parseJSON("@Model.FormPropertiesList"));
}

Я что-то пропустил?

Обновлено: это мой серверный код

var list = JsonConvert.DeserializeObject<List<NewFormPropertyViewModel>>(Input.FormPropertiesList);
Input.FormPropertiesList = JsonConvert.SerializeObject(list);
return View("Create", Input);

Вот как я конвертирую строку в JSON

$("#@Html.IdFor(m => m.FormPropertiesList)").val(JSON.stringify(dataSet));

Строка, которую вы пытаетесь проанализировать на стороне клиента, по какой-то причине выглядит так, как будто она закодирована.

Taplar 15.03.2019 17:25

Функция jQuery parseJSON устарела, вместо этого используйте собственный метод JSON.parse(). api.jquery.com/jquery.parsejson

Jimmy Leahy 15.03.2019 17:26

Та же проблема с JSON..parse(). я получаю ту же ошибку

JianYA 15.03.2019 17:27

Из-за кодировки....

Taplar 15.03.2019 17:27

Нам нужно увидеть код JS, который создает этот закодированный JSON, и то, как вы отправляете его на контроллер, поскольку это источник проблемы.

Rory McCrossan 15.03.2019 17:29

Откуда вы взяли данные из своего первого фрагмента? Вы его с сетевой консоли выхватывали из самого запроса? Потому что stringify не должен экранировать json с помощью `\`

Taplar 15.03.2019 17:34

Первый фрагмент пришел со стороны сервера. После отправки формы.

JianYA 15.03.2019 17:35

Хорошо, значит, там что-то странное. Действительный json не будет иметь такого экранирования. Можете ли вы взять его из запроса на клиенте и показать нам, как это выглядит?

Taplar 15.03.2019 17:36

[{"PropertyName":"wegewg","Key":"ewgew","PrimaryValue":"","S‌​econdaryValue":"","T‌​ertiaryValue":"","Mi‌​nimumValue":" ","Maxi‌​mumValue":""},{"Prop‌​ertyName":"tkytk","K‌​ey":"tykytk","Primar‌​yValue":"","Secondar‌​yValue":"" ,"Tertiary‌​Value":"","MinimumVa‌​lue":"","MaximumValue‌​e":""}] - Вот что я получил

JianYA 15.03.2019 17:53
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
79
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Сначала замените "&quot"

var serverrep= "[{&quot;PropertyName&quot;:&quot;fewfewf&quot;,&quot;Key&quot;:&quot;ewgwewe&quot;,&quot;PrimaryValue&quot;:&quot;&quot;,&quot;SecondaryValue&quot;:&quot;&quot;,&quot;TertiaryValue&quot;:&quot;&quot;,&quot;MinimumValue&quot;:&quot;&quot;,&quot;MaximumValue&quot;:&quot;&quot;}]"


var serverRepWithoutQuots=serverrep.replace(/&quot;/g, '"');
console.info(serverRepWithoutQuots)
console.info(JSON.parse(serverRepWithoutQuots))

Хотя это очень странно. Что я делаю не так, что мне нужно его заменить?

JianYA 15.03.2019 17:54

У меня была такая проблема при передаче JSON в мой шаблон, а затем в мой файл js в Django. Когда вы делаете это в Django, вы передаете что-то из представления в контексте, а затем, когда вы находитесь в шаблоне Django, вы делаете что-то вроде

var someName = {{ fromView }};

а у меня он был заключен в двойные кавычки

var someName = "{{ fromView }}";

поэтому он избегал двойных кавычек в анализируемом JSON. Я потратил около 2 часов, пытаясь понять, что случилось, и мне буквально пришлось просто изменить двойные кавычки на одинарные, потому что он читал его как строку с двойными кавычками, в которой была другая строка (строка json) с двойными кавычками.

var someName = '{{ fromView }}';

Дело в том, что я бы проверил JSON, чтобы убедиться, что вы не передаете его неправильно, и он неправильно закодирован / где-то добавлены дополнительные кавычки

Привет! Спасибо, что предоставили это решение. Я использую .net core и также пытался заменить его одинарными кавычками. Однако я получаю ту же проблему. Кажется, что двойные кавычки исходят от сервера.

JianYA 15.03.2019 17:54

Я полагаю, что другой вариант может заключаться в том, что то, что вы получаете с сервера, уже сериализовано в формате JSON, а затем вы снова сериализуете, чтобы оно кодировалось. Я считаю, что это может произойти с некоторыми вещами, такими как webapi. Я давно не писал .net, так что я не совсем уверен, но полагаю, стоит попробовать. Попробуйте не сериализовать его вручную и посмотрите, может быть, сервер просто возвращает его сериализованным для начала?

Michael Cacciano 15.03.2019 18:29
Ответ принят как подходящий

Строка кодируется HTML. Вы можете использовать @HTML.Raw, чтобы сообщить Razor поставить string как есть. Одна из причин, по которой строки кодируются, заключается в целях безопасности. Допустим, вы пытаетесь отобразить некоторые данные, которые вы только что извлекли из базы данных, и эти данные содержат некоторый «вредоносный» JavaScript, хотя этот код будет безвреден для базы данных, он повлияет на клиента после отображения представления. Можешь попробовать:

if ("@Model.FormPropertiesList".length !== 0) {
    console.info(JSON.parse("@HTML.Raw(Model.FormPropertiesList)"));
}

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