JSON.parse nieoczekiwany błąd znaku

112

Otrzymuję ten błąd:

JSON.parse: nieoczekiwany znak

kiedy uruchamiam tę instrukcję w programie firebug:

JSON.parse({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false});

Dlaczego tak się dzieje? Ciąg JSON wydaje mi się poprawny i przetestowałem go również za pomocą JSHint. Przekazany obiekt w powyższym przypadku jest odpowiedzią serwera z ustawionym typem zawartościapplication/json

krishna
źródło

Odpowiedzi:

224

Nie analizujesz ciągu, analizujesz już przeanalizowany obiekt :)

var obj1 = JSON.parse('{"creditBalance":0,...,"starStatus":false}');
//                    ^                                          ^
//                    if you want to parse, the input should be a string 

var obj2 = {"creditBalance":0,...,"starStatus":false};
// or just use it directly.
kennytm
źródło
Chcę zagłosować za pierwszym zdaniem, ale dlaczego miałbyś powtórzyć analizę?
Mathletics
1
@MarcelKorpel, Mathletics: Racja. Zaktualizowano.
kennytm
@Mathletics By all accounts JSON.parse przeprowadza pewną kontrolę bezpieczeństwa. NT
BF
5
To przezabawne. Kocham to. <3
Darth Egregious
1
Otrzymuję undefined na data.results (dane to obiekt JSON). Stack mówi mi, żebym uczynił go obiektem js przez data = JSON.parse (dane). Ale otrzymuję nieoczekiwany błąd znaku JSON.parse.
KasparTr,
35

Możesz upewnić się, że dany obiekt został zdefiniowany przed przekazaniem go do funkcji parsowania, po prostu używając JSON.stringify().

Zaktualizowałem swoją linię poniżej,

JSON.parse(JSON.stringify({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false}));

lub jeśli masz JSON zapisany w jakiejś zmiennej:

JSON.parse(JSON.stringify(yourJSONobject));
ScrapCode
źródło
3
JSON.stringify jest szefem.
Kenmeister
-1

Nieprawda dla OP, ale ten błąd może być spowodowany użyciem pojedynczych cudzysłowów ( ') zamiast double ( ") dla łańcuchów.

Specyfikacja JSON wymaga podwójnych cudzysłowów dla ciągów.

Na przykład:

JSON.parse(`{"myparam": 'myString'}`)

podaje błąd, podczas gdy

JSON.parse(`{"myparam": "myString"}`)

nie. Zwróć uwagę na cudzysłowy wokół myString.

Powiązane: https://stackoverflow.com/a/14355724/1461850

atomh33ls
źródło