JSON.parse lỗi ký tự không mong muốn


112

Tôi gặp lỗi này:

JSON.parse: ký tự không mong đợi

khi tôi chạy câu lệnh này trong firebug:

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

Tại sao nó như vậy? Chuỗi JSON có vẻ đúng với tôi và tôi cũng đã thử nghiệm nó bằng JSHint. Đối tượng được truyền trong trường hợp trên là phản hồi của máy chủ với kiểu nội dung được đặt thànhapplication/json

Câu trả lời:


224

Bạn không phân tích cú pháp một chuỗi, bạn đang phân tích một đối tượng đã được phân tích cú pháp :)

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.

Tôi muốn ủng hộ cho câu đầu tiên, nhưng tại sao bạn lại phân tích cú pháp?
Mathletics

1
@MarcelKorpel, Mathletics: Đúng. Đã cập nhật.
kennytm

@Mathletics Bởi tất cả các tài khoản JSON.parse thực hiện một số kiểm tra bảo mật. NT
BF

5
Thật là vui nhộn. Yêu nó. <3
Darth Egrerious

1
Tôi nhận được không xác định trên data.results (dữ liệu là một đối tượng JSON). Stack nói với tôi rằng hãy biến nó thành một đối tượng js bởi data = JSON.parse (data). Nhưng tôi gặp lỗi ký tự không mong muốn JSON.parse.
KasparTr

35

Bạn có thể đảm bảo rằng đối tượng được đề cập đã được xâu chuỗi trước khi chuyển nó đến hàm phân tích cú pháp bằng cách sử dụng JSON.stringify().

Đã cập nhật dòng của bạn bên dưới,

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

hoặc nếu bạn có JSON được lưu trữ trong một số biến:

JSON.parse(JSON.stringify(yourJSONobject));

3
JSON.stringify là ông chủ.
Kenmeister,

-1

Không đúng với OP, nhưng lỗi này có thể do sử dụng dấu ngoặc kép ( ') thay vì kép ( ") cho chuỗi.

Đặc tả JSON yêu cầu dấu ngoặc kép cho chuỗi.

Ví dụ:

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

đưa ra lỗi, trong khi

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

không làm. Lưu ý các dấu ngoặc kép xung quanh myString.

Liên quan: https://stackoverflow.com/a/14355724/1461850

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.