co powoduje ten błąd w trzeciej linii?
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
Otwórz konsolę, aby wyświetlić błąd
javascript
jquery
json
coiso
źródło
źródło
Odpowiedzi:
products
jest przedmiotem. (tworzenie z dosłowności obiektu)JSON.parse()
służy do konwersji ciągu zawierającego notację JSON na obiekt JavaScript.Twój kod zamienia obiekt w ciąg (przez wywołanie
.toString()
), aby spróbować go parsować jako tekst JSON.Domyślnie
.toString()
zwraca wartość"[object Object]"
, która nie jest poprawna JSON; stąd błąd.źródło
.toString()
zwraca (zgodnie ze specyfikacją).Powiedzmy, że wiesz, że to prawidłowy JSON, ale nadal otrzymujesz to ...
W takim przypadku prawdopodobne jest, że w ciągu znajdują się ukryte / znaki specjalne z dowolnego źródła. Gdy wkleisz do walidatora, zostaną one utracone - ale w łańcuchu wciąż tam są. Te znaki, choć niewidoczne, się złamią
JSON.parse()
Jeśli
s
jest to Twój surowy JSON, oczyść go za pomocą:źródło
s = s.replace(/[\u0000-\u001F]+/g,"");
zamiasts = s.replace(/[\u0000-\u0019]+/g,"");
, do zamiany wszystkich znaków kontrolnych. Dobrze?Wygląda na to, że chcesz skreślić obiekt. Więc zrób to:
Przyczyną błędu jest to, że
JSON.parse()
oczekujeString
wartości iproducts
jest toArray
.Uwaga: Myślę, że próby
json.parse('[object Array]')
, która narzeka, że nie spodziewałem tokenao
po[
.źródło
Znalazłem ten sam problem z
JSON.parse(inputString)
.W moim przypadku ciąg wejściowy pochodzi z mojej strony serwera [powrót metody strony] .
Wydrukowałem
typeof(inputString)
- to był ciąg, wciąż występuje błąd.Próbowałem też
JSON.stringify(inputString)
, ale to nie pomogło.Później stwierdziłem, że jest to problem z nowym operatorem linii
[\n]
wewnątrz wartości pola.Zrobiłem zamianę [z inną postacią, wstawiłem nową linię po analizie] i wszystko działa dobrze.
źródło
JSON.parse czeka na parametr w parametrze String. Musisz rozwikłać swój obiekt JSON, aby rozwiązać problem.
źródło
zmień na
źródło
JSON.parse
, argumenty muszą być ciągiem.JSON.parse(products.replace(/'/g, '"'))
Należy sprawdzić poprawność ciąg JSON tutaj .
Prawidłowy ciąg JSON musi zawierać podwójne cudzysłowy wokół klawiszy:
Jeśli nie ma cytatów, spowoduje to błąd:
Użycie pojedynczych cudzysłowów spowoduje również błąd:
źródło
render ([key: value])
z pojedynczymi cudzysłowami, co prowadzi do analizy składni JSON na pozycji 1 w jQuery Ajax.render (groovy.json.JsonOutput.toJson ([key:value]))
pomógł mi.Jeśli są spacje wiodące lub końcowe, będą one nieprawidłowe. Spacje końcowe / wiodące można usunąć jako
Źródło: http://www.toptip.ca/2010/02/javascript-trim-leading-or-trailing.html
źródło
Oto twój idealny Json, który możesz przeanalizować.
źródło
Oto funkcja, którą wykonałem na podstawie poprzednich odpowiedzi: działa na moim komputerze, ale YMMV.
źródło
Inny gotcha, który może powodować
"SyntaxError: Unexpected token"
wyjątek podczas wywoływania,JSON.parse()
używa jednej z następujących wartości ciągu:Znaki nowej linii.
Karty (tak, karty, które można tworzyć za pomocą klawisza Tab!)
Wszelkie samodzielne ukośniki
\
(ale z jakiegoś powodu nie/
, przynajmniej nie w Chrome).(Aby uzyskać pełną listę, zobacz sekcję String tutaj .)
Na przykład następujący wyjątek zapewni ci ten wyjątek:
Dlatego należy zmienić na:
Co, należy powiedzieć, sprawia, że jest dość nieczytelny w formacie tylko JSON z większą ilością tekstu.
źródło
Gdy używasz metody POST lub PUT, pamiętaj o usztywnieniu części ciała.
Udokumentowałem tutaj przykład https://gist.github.com/manju16832003/4a92a2be693a8fda7ca84b58b8fa7154
źródło
Mam nadzieję, że pomoże to komuś innemu.
Mój problem polegał na tym, że skomentowałem HTML w funkcji wywołania zwrotnego PHP za pośrednictwem AJAX, która analizowała komentarze i zwróciła niepoprawny JSON.
Po usunięciu skomentowanego kodu HTML wszystko było w porządku, a JSON został przeanalizowany bez żadnych problemów.
źródło
produkty to tablica, z której można korzystać bezpośrednio:
źródło
Teraz najwyraźniej
\r
,\b
,\t
,\f
, itp nie są problemem tylko znaków, które mogą dać ci ten błąd.Pamiętaj, że niektóre przeglądarki mogą mieć dodatkowe wymagania dotyczące wprowadzania
JSON.parse
.Uruchom ten kod testowy w przeglądarce:
Testując na Chrome, widzę, że nie pozwala
JSON.parse(String.fromCharCode(0x22, x, 0x22));
gdziex
jest 34, 92 lub od 0 do 31.Znaki 34 i 92 to
"
i\
znaki odpowiednio, i są one zwykle oczekuje i właściwie uciekł. To znaki od 0 do 31, które sprawiłyby ci problemy.Aby pomóc w debugowaniu, zanim to zrobisz
JSON.parse(input)
, najpierw sprawdź, czy dane wejściowe nie zawierają problematycznych znaków:źródło
Dlaczego potrzebujesz JSON.parse? Jest już w tablicy formatu obiektowego.
Lepiej użyj JSON.stringify jak poniżej:
var b = JSON.stringify(products);
To może ci pomóc.
źródło
O rany, wszystkie powyższe odpowiedzi nie były dla mnie skuteczne. Właśnie miałem podobny problem. Udało mi się to rozwiązać, pakując cytat. Zobacz zrzut ekranu. Whoo.
Oryginalny:
źródło
Występujący błąd, tj. „Nieoczekiwany token o”, jest spowodowany oczekiwaniem JSON, ale obiekt jest uzyskiwany podczas analizowania. To „o” jest pierwszą literą słowa „przedmiot”.
źródło
Jedynym błędem, który popełniasz, jest parsowanie już przeanalizowanego obiektu, więc generuje błąd, użyj go i będziesz gotowy.
jeśli chcesz wydrukować cały Json, użyj JSON.stringify ()
źródło
Może się to zdarzyć z wielu powodów, ale prawdopodobnie z powodu niepoprawnego znaku, więc możesz użyć
JSON.stringify(obj);
, który zmieni obiekt w JSON, ale pamiętaj, że jest to wyrażenie JQUERY.źródło
Mam ten błąd, PONIEWAŻ API, które zwróciło obiekt json, dawało BŁĄD (w moim przypadku Code Igniter, zwraca html, gdy kod php zawiedzie), więc NIE JEST JSON OBJECT.
Sprawdź zdania SQL i kod PHP i przetestuj go za pomocą Postmana (lub innego testera API)
źródło
Błąd, który popełniłem, był mijający
null
(nieświadomie) do JSON.parse ().Więc rzucił
Unexpected token n in JSON at position 0
źródło
Zastosowanie
eval
. Pobiera wyrażenie / kod JavaScript jako ciąg znaków i ocenia je / wykonuje.źródło