Это то, что я отправляю на свой контроллер:
"[{\"PropertyName\":\"fewfewf\",\"Key\":\"ewgwewe\",\"PrimaryValue\":\"\",\"SecondaryValue\":\"\",\"TertiaryValue\":\"\",\"MinimumValue\":\"\",\"MaximumValue\":\"\"},{\"PropertyName\":\"rwhjyjut\",\"Key\":\"jtyjyt\",\"PrimaryValue\":\"\",\"SecondaryValue\":\"\",\"TertiaryValue\":\"\",\"MinimumValue\":\"\",\"MaximumValue\":\"\"}]"
Это то, что я получаю от сервера после повторного анализа и сериализации.
Я очень смущен, так как ничего не менял. Когда я пытаюсь разобрать его на стороне 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));
Функция jQuery parseJSON устарела, вместо этого используйте собственный метод JSON.parse(). api.jquery.com/jquery.parsejson
Та же проблема с JSON..parse(). я получаю ту же ошибку
Из-за кодировки....
Нам нужно увидеть код JS, который создает этот закодированный JSON, и то, как вы отправляете его на контроллер, поскольку это источник проблемы.
Откуда вы взяли данные из своего первого фрагмента? Вы его с сетевой консоли выхватывали из самого запроса? Потому что stringify не должен экранировать json с помощью `\`
Первый фрагмент пришел со стороны сервера. После отправки формы.
Хорошо, значит, там что-то странное. Действительный json не будет иметь такого экранирования. Можете ли вы взять его из запроса на клиенте и показать нам, как это выглядит?
[{"PropertyName":"wegewg","Key":"ewgew","PrimaryValue":"","SecondaryValue":"","TertiaryValue":"","MinimumValue":" ","MaximumValue":""},{"PropertyName":"tkytk","Key":"tykytk","PrimaryValue":"","SecondaryValue":"" ,"TertiaryValue":"","MinimumValue":"","MaximumValuee":""}] - Вот что я получил



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сначала замените """
var serverrep= "[{"PropertyName":"fewfewf","Key":"ewgwewe","PrimaryValue":"","SecondaryValue":"","TertiaryValue":"","MinimumValue":"","MaximumValue":""}]"
var serverRepWithoutQuots=serverrep.replace(/"/g, '"');
console.info(serverRepWithoutQuots)
console.info(JSON.parse(serverRepWithoutQuots))Хотя это очень странно. Что я делаю не так, что мне нужно его заменить?
У меня была такая проблема при передаче JSON в мой шаблон, а затем в мой файл js в Django. Когда вы делаете это в Django, вы передаете что-то из представления в контексте, а затем, когда вы находитесь в шаблоне Django, вы делаете что-то вроде
var someName = {{ fromView }};
а у меня он был заключен в двойные кавычки
var someName = "{{ fromView }}";
поэтому он избегал двойных кавычек в анализируемом JSON. Я потратил около 2 часов, пытаясь понять, что случилось, и мне буквально пришлось просто изменить двойные кавычки на одинарные, потому что он читал его как строку с двойными кавычками, в которой была другая строка (строка json) с двойными кавычками.
var someName = '{{ fromView }}';
Дело в том, что я бы проверил JSON, чтобы убедиться, что вы не передаете его неправильно, и он неправильно закодирован / где-то добавлены дополнительные кавычки
Привет! Спасибо, что предоставили это решение. Я использую .net core и также пытался заменить его одинарными кавычками. Однако я получаю ту же проблему. Кажется, что двойные кавычки исходят от сервера.
Я полагаю, что другой вариант может заключаться в том, что то, что вы получаете с сервера, уже сериализовано в формате JSON, а затем вы снова сериализуете, чтобы оно кодировалось. Я считаю, что это может произойти с некоторыми вещами, такими как webapi. Я давно не писал .net, так что я не совсем уверен, но полагаю, стоит попробовать. Попробуйте не сериализовать его вручную и посмотрите, может быть, сервер просто возвращает его сериализованным для начала?
Строка кодируется HTML. Вы можете использовать @HTML.Raw, чтобы сообщить Razor поставить string как есть. Одна из причин, по которой строки кодируются, заключается в целях безопасности. Допустим, вы пытаетесь отобразить некоторые данные, которые вы только что извлекли из базы данных, и эти данные содержат некоторый «вредоносный» JavaScript, хотя этот код будет безвреден для базы данных, он повлияет на клиента после отображения представления. Можешь попробовать:
if ("@Model.FormPropertiesList".length !== 0) {
console.info(JSON.parse("@HTML.Raw(Model.FormPropertiesList)"));
}
Строка, которую вы пытаетесь проанализировать на стороне клиента, по какой-то причине выглядит так, как будто она закодирована.