что вызывает эту ошибку в третьей строке?
var products = [{
"name": "Pizza",
"price": "10",
"quantity": "7"
}, {
"name": "Cerveja",
"price": "12",
"quantity": "5"
}, {
"name": "Hamburguer",
"price": "10",
"quantity": "2"
}, {
"name": "Fraldas",
"price": "6",
"quantity": "2"
}];
console.log(products);
var b = JSON.parse(products); //unexpected token o
Откройте консоль для просмотра ошибки
javascript
jquery
json
coiso
источник
источник
Ответы:
products
это объект. (создание из объекта литерала)JSON.parse()
используется для преобразования строки, содержащей нотацию JSON, в объект Javascript.Ваш код превращает объект в строку (путем вызова
.toString()
), чтобы попытаться проанализировать его как текст JSON. Возвращаетзначение по умолчанию , которое не является допустимым JSON; отсюда и ошибка.
.toString()
"[object Object]"
источник
.toString()
возвращается (согласно спецификации).Допустим, вы знаете, что это действительно JSON, но вы все еще получаете это ...
В этом случае вполне вероятно, что в строке есть скрытые / специальные символы из любого источника, откуда вы их получили. Когда вы вставляете в валидатор, они теряются - но в строке они все еще там. Эти символы, пока они невидимы, сломаются
JSON.parse()
Если
s
ваш необработанный JSON, то очистите его:источник
s = s.replace(/[\u0000-\u001F]+/g,"");
вместоs = s.replace(/[\u0000-\u0019]+/g,"");
, для замены всех управляющих символов. Правильно?Кажется, вы хотите, чтобы привести в порядок объект. Так что сделайте это:
Причиной ошибки является то, что
JSON.parse()
ожидаетString
значение иproducts
являетсяArray
.Примечание: я думаю, что он пытается,
json.parse('[object Array]')
который жалуется, что не ожидал токенo
после[
.источник
Я нашел ту же проблему с
JSON.parse(inputString)
.В моем случае входная строка поступает со страницы моего сервера [возврат метода страницы] .
Я напечатал
typeof(inputString)
- это была строка, но ошибка по-прежнему возникает.Я тоже пытался
JSON.stringify(inputString)
, но это не помогло.Позже я обнаружил, что это проблема с оператором новой строки
[\n]
внутри значения поля.Я сделал замену [другим символом, поставил новую строку после разбора] и все работает нормально.
источник
JSON.parse ожидает строку в параметре. Чтобы решить эту проблему, вам нужно привести в порядок свой JSON-объект.
источник
изменить на
источник
JSON.parse
, аргументы должны быть строкой.JSON.parse(products.replace(/'/g, '"'))
Вы должны проверить вашу строку JSON здесь .
Допустимая строка JSON должна иметь двойные кавычки вокруг ключей:
Если нет кавычек, это приведет к ошибке:
Использование одинарных кавычек также приведет к ошибке:
источник
render ([key: value])
с одинарными кавычками, что приводит к JSON parseError в позиции 1 в jquery Ajax.render (groovy.json.JsonOutput.toJson ([key:value]))
помог мнеЕсли есть пробелы в начале или в конце, он будет недействительным. Конечные / ведущие пробелы могут быть удалены как
Источник: http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html
источник
Вот ваш идеальный Json, который вы можете разобрать.
источник
Вот функция, которую я сделал на основе предыдущих ответов: она работает на моей машине, но YMMV.
источник
Еще одна ошибка, которая может привести к
"SyntaxError: Unexpected token"
исключению при вызовеJSON.parse()
, использует любое из следующих значений строки:Новые строки персонажей.
Вкладки (да, вкладки, которые вы можете создать с помощью клавиши Tab!)
Любая отдельная косая черта
\
(но по какой-то причине нет/
, по крайней мере, на Chrome.)(Полный список см. В разделе « Строка» .)
Например, следующее даст вам это исключение:
Так что это должно быть изменено на:
Что, я должен сказать, делает его совершенно нечитаемым в формате только JSON с большим количеством текста.
источник
Когда вы используете метод POST или PUT, убедитесь, что вы структурировали часть тела.
Я задокументировал пример здесь https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154
источник
Надеюсь, это поможет кому-то еще.
Моя проблема заключалась в том, что я прокомментировал HTML в функции обратного вызова PHP через AJAX, который анализировал комментарии и возвращал неверный JSON.
Как только я удалил закомментированный HTML, все было хорошо, и JSON был проанализирован без проблем.
источник
products - это массив, который можно использовать напрямую:
источник
Теперь , по- видимому
\r
,\b
,\t
,\f
и т.д. , не являются единственными проблемными символы , которые могут дать вам эту ошибку.Обратите внимание, что некоторые браузеры могут иметь дополнительные требования для ввода
JSON.parse
.Запустите этот тестовый код в вашем браузере:
Тестируя Chrome, я вижу, что он не разрешает
JSON.parse(String.fromCharCode(0x22, x, 0x22));
гдеx
34, 92 или от 0 до 31.Символы 34 и 92 являются
"
и\
символами , соответственно, и они, как правило , ожидаются , и должным образом спаслись. Это символы от 0 до 31, которые доставят вам проблемы.Чтобы помочь с отладкой, прежде чем сделать это
JSON.parse(input)
, сначала убедитесь, что ввод не содержит проблемных символов:источник
Зачем вам нужен JSON.parse? Это уже в массиве формата объекта.
Лучше использовать JSON.stringify, как показано ниже:
var b = JSON.stringify(products);
Это может помочь вам.
источник
О, мужик, решения во всех вышеприведенных ответах, предоставленных до сих пор, не сработали для меня У меня была похожая проблема только сейчас. Мне удалось решить это с упаковкой с цитатой. Смотрите скриншот. Ого.
Оригинал:
источник
Ошибка, которую вы получаете, т. Е. «Неожиданный токен o», заключается в том, что ожидается json, но объект получен при разборе. Это «о» является первой буквой слова «объект».
источник
Единственная ошибка, которую вы делаете, это то, что вы анализируете уже проанализированный объект, поэтому он выдает ошибку, используйте это, и вам будет хорошо идти.
если вы хотите напечатать весь json, используйте JSON.stringify ()
источник
Это может произойти по многим причинам, но, возможно, из-за недопустимого символа, поэтому вы можете использовать его
JSON.stringify(obj);
, чтобы превратить ваш объект в JSON, но помните, что это выражение JQUERY.источник
У меня есть эта ошибка, ПОТОМУ ЧТО API, который возвратил объект json, дал ОШИБКУ (в моем случае Code Igniter, возвращает html, когда код php терпит неудачу), так что ЭТО НЕ ОБЪЕКТ JSON.
Проверьте предложения SQL и код PHP и протестируйте его с помощью Postman (или другого API-тестера)
источник
Ошибка, которую я делал, проходила мимо
null
(неосознанно) в JSON.parse ().Так кидал
Unexpected token n in JSON at position 0
источник
Использование
eval
. Он принимает выражение / код JavaScript в виде строки и оценивает / выполняет его.источник