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

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.

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));

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.