Ответ 1
Эта ошибка обычно наблюдается, когда значение, заданное для JSON.parse
, фактически undefined
.
Итак, я бы проверил код, который пытается разобрать это - скорее всего, вы не разбираете фактическую строку, показанную здесь.
Я получаю эту ошибку "unsached syntaxerror неожиданный токен U", когда я запускаю свою страницу в chrome. И в firefox я получаю: "JSON.parse: неожиданный персонаж". Я возвращаю json-данные из php файла, и возвращающая строка json действительна. Я проверил его с помощью http://jsonlint.com/. Любая помощь будет оценена... Спасибо.
Здесь возвращенная строка JSON
[
["1","Pan Africa Market","\"1521 1st Ave, Seattle, WA\"","47.608941","-122.340145","restaurant"],
["2","The Melting Pot","14 Mercer St, Seattle, WA","47.624562","-122.356442","restaurant"],
["3","Ipanema Grill","1225 1st Ave, Seattle, WA","47.606366","-122.337656","restaurant"],
["4","Sake House","230 1st Ave, Seattle, WA","47.612825","-122.34567","bar"],
["5","Crab Pot","1301 Alaskan Way, Seattle, WA","47.605961","-122.34036","restaurant"],
["6","Mexican Kitchen","2234 2nd Ave, Seattle,WA","47.613975","-122.345467","bar"],
["7","Wingdome","1416 E Olive Way, Seattle, WA","47.617215","-122.326584","bar"],
["8","Piroshky Piroshky","1908 Pike pl, Seattle, WA","47.610127","-122.342838","restaurant"]
]
Эта ошибка обычно наблюдается, когда значение, заданное для JSON.parse
, фактически undefined
.
Итак, я бы проверил код, который пытается разобрать это - скорее всего, вы не разбираете фактическую строку, показанную здесь.
Я получал это сообщение во время проверки (в проекте MVC). Для меня добавлена функция ValidationMessageFor.
Чтобы быть точным, строка номер 43 в jquery.validate.unobtrusive.js вызвала проблему:
replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;
Наиболее распространенным случаем этой ошибки является использование шаблона, который генерирует элемент управления, а затем меняет способ id
и/или name
генерируется путем "переопределения" шаблона по умолчанию с чем-то вроде
@Html.TextBoxFor(m => m, new {Name = ViewData["Name"], id = ViewData["UniqueId"]} )
а затем забыв изменить ValidationMessageFor
на
@Html.ValidationMessageFor(m => m, null, new { data_valmsg_for = ViewData["Name"] })
Надеюсь, это сэкономит вам некоторое время.
Параметр для JSON.parse может ничего не возвращать (т.е. Значение, указанное для JSON.parse, не undefined
)!
Это случилось со мной, когда я анализировал скомпилированный код солидности из файла xyz.sol.
import web3 from './web3';
import xyz from './build/xyz.json';
const i = new web3.eth.Contract(
JSON.parse(xyz.interface),
'0x99Fd6eFd4257645a34093E657f69150FEFf7CdF5'
);
export default i;
который был написан с ошибкой как
JSON.parse(xyz.intereface)
который ничего не возвращал!
Я испытал эту ошибку, когда я запустил условие поиска в JSONArray в цикле for. Проблема, с которой я столкнулась, была результатом одного из значений в цикле for, возвращающих null. Следовательно, когда я пытался получить доступ к свойству, это не сработало.
Итак, если вы делаете что-либо в JSONArrays, где вы не уверены в источнике данных и его целостности, я думаю, что это хорошая привычка иметь дело с исключениями null и undefined в этом случае.
Я исправил его, проверив нулевое значение возвращаемого значения find в JSONArray и обработав исключения соответствующим образом.
Мысль это может помочь.
В моем случае он пытался вызвать JSON.parse() в переменной AJAX до возвращения XHRResponse. EG:
var response = $.get(URL that returns a valid JSON string);
var data = JSON.parse(response.responseText);
Я заменил это на пример из сайта jQuery для $.get:
<script type="text/javascript">
var jqxhr = $.get( "https://jira.atlassian.com/rest/api/2/project", function() {
alert( "success" );
})
.done(function() {
//insert code to assign the projects from Jira to a div.
jqxhr = jqxhr.responseJSON;
console.log(jqxhr);
var div = document.getElementById("products");
for (i = 0; i < jqxhr.length; i++) {
console.log(jqxhr[i].name);
div.innerHTML += "<b>Product: " + jqxhr[i].name + "</b><BR/>Key: " + jqxhr[i].key + "<BR/>";
}
console.log(div);
alert( "second success" );
})
.fail(function() {
alert( "error" );
})
.always(function() {
alert( "finished" );
});
// Perform other work here ...
// Set another completion function for the request above
jqxhr.always(function() {
alert( "second finished" );
});
</script>
Просто инсус и не понял
Например, это означает, что я могу сказать, что у меня есть JSON STRING..NOT YET JSON OBJECT OR ARRAY.
поэтому если в javascript u проанализируйте строку как
var body={
"id": 1,
"deleted_at": null,
"open_order": {
"id": 16,
"status": "open"}
var jsonBody = JSON.parse(body.open_order); //HERE THE ERROR NOW APPEARS BECAUSE THE STRING IS NOT A JSON OBJECT YET!!!!
//TODO SO
var jsonBody=JSON.parse(body)//PASS THE BODY FIRST THEN LATER USE THE jsonBody to get the open_order
var OpenOrder=jsonBody.open_order;
Отличные ответы выше
Это непростая задача. Эта проблема также возникает на моем сайте, вы должны перенести файлы js сверху. Потому что в том месте, где вы используете JSON Parsing, на этот раз ваши JS файлы не загружены. ПРИМЕР #
<script type="text/javaScript">
...........SOME CODE.............
</script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
измените на
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script type="text/javaScript">
...........SOME CODE.............
</script>
Что ж, для всех, кто на самом деле не может найти ошибку где-либо в вашем коде, ни "не определено, как говорится в локальном хранилище, ни null"... просто закомментируйте ваш код и напишите другой, который фактически удаляет элемент в локальном хранилище. После этого вы можете прокомментировать или удалить текущий код и снова сбросить предыдущий, просто раскомментировав его (если вы не удалите его... если вы это сделали, вы можете написать его снова :))
LocalStorage.setItem('Previous' , "removeprevious");
LocalStorage.removeItem('Previous');
Console.log(LocalStorage.getItem('Previous'));
Консоль покажет ноль и что она... сбросит ваш код снова, если t не работает, чувак! Вы получили ошибки.
Извините за мой английский!
Этот ответ, если для людей, которые сталкиваются с этой ошибкой при работе с Загрузка файла..
Мы использовали промежуточное программное обеспечение для шифрования на основе токенов - дешифрование, и мы столкнулись с той же ошибкой.
Ниже приведен наш код в файле маршрута:
router.route("/uploadVideoMessage")
.post(
middleware.checkToken,
upload.single("video_file"),
videoMessageController.uploadVideoMessage
);
здесь мы вызывали промежуточное программное обеспечение перед загрузкой, и это вызывало ошибку. Поэтому, когда мы изменили это, это сработало.
router.route("/uploadVideoMessage")
.post(
upload.single("video_file"),
middleware.checkToken,
videoMessageController.uploadVideoMessage
);
рассмотрим использование
eval("("+your_json_var+")");
Это намного лучше, чем $.parseJSON()
Я получал эту ошибку, когда я использовал одну и ту же переменную для строки json и разбирал json:
var json = '{"1":{"url":"somesite1","poster":"1.png","title":"site title"},"2":{"url":"somesite2","poster":"2.jpg","title":"site 2 title"}}'
function usingjson(){
var json = JSON.parse(json);
}
Я изменил функцию на:
function usingjson(){
var j = JSON.parse(json);
}
Теперь эта ошибка исчезла.