JSON.parse ข้อผิดพลาดของอักขระที่ไม่คาดคิด


112

ฉันได้รับข้อผิดพลาดนี้:

JSON.parse: อักขระที่ไม่คาดคิด

เมื่อฉันเรียกใช้คำสั่งนี้ใน firebug:

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

ทำไมจึงเป็นเช่นนั้น? ดูเหมือนว่าสตริง JSON จะถูกต้องสำหรับฉันและฉันก็ทดสอบโดยใช้ JSHint ด้วย อ็อบเจ็กต์ที่ส่งผ่านในกรณีข้างต้นคือการตอบสนองของเซิร์ฟเวอร์ที่กำหนดประเภทเนื้อหาเป็นapplication/json

คำตอบ:


224

คุณไม่ได้แยกวิเคราะห์สตริงคุณกำลังแยกวิเคราะห์วัตถุที่แยกวิเคราะห์แล้ว :)

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.

ฉันต้องการโหวตให้ประโยคแรก แต่ทำไมคุณถึงแยกวิเคราะห์ใหม่
Mathletics

1
@MarcelKorpel, Mathletics: ใช่เลย Updated
kennytm

@Mathletics โดยบัญชีทั้งหมด JSON.parse ตรวจสอบความปลอดภัยบางอย่าง NT
BF

5
ที่เฮฮา. รักมัน. <3
Darth Egregious

1
ฉันไม่ได้กำหนดไว้ใน data.results (ข้อมูลเป็นออบเจ็กต์ JSON) Stack กำลังบอกให้ฉันทำให้เป็นวัตถุ js โดย data = JSON.parse (data) แต่ฉันได้รับ JSON.parse ข้อผิดพลาดของอักขระที่ไม่คาดคิด
KasparTr

35

คุณสามารถตรวจสอบให้แน่ใจว่าวัตถุในคำถามคือ stringified JSON.stringify()ก่อนที่จะผ่านไปยังฟังก์ชั่นการแยกวิเคราะห์โดยเพียงแค่ใช้

อัปเดตบรรทัดของคุณด้านล่าง

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

หรือถ้าคุณมี JSON เก็บไว้ในตัวแปรบางตัว:

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

3
JSON.stringify เป็นเจ้านาย
Kenmeister

-1

ไม่เป็นความจริงสำหรับ OP แต่ข้อผิดพลาดนี้อาจเกิดจากการใช้เครื่องหมายคำพูดเดี่ยว ( ') แทน double ( ") สำหรับสตริง

ข้อมูลจำเพาะ JSONต้องใช้เครื่องหมายอัญประกาศคู่สำหรับสตริง

เช่น:

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

ให้ข้อผิดพลาดในขณะที่

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

ไม่. myStringหมายเหตุเครื่องหมายอัญประกาศรอบ

ที่เกี่ยวข้อง: https://stackoverflow.com/a/14355724/1461850

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.