ตามแผนภาพไดอะแกรมของเครื่องจักรบนเว็บไซต์ JSONอนุญาตให้ใช้อักขระเครื่องหมายคำพูดคู่ที่ยกเว้นเท่านั้นไม่ใช่เครื่องหมายคำพูดเดี่ยว ไม่จำเป็นต้องใช้อักขระเครื่องหมายคำพูดเดี่ยว:
อัปเดต - ข้อมูลเพิ่มเติมสำหรับผู้ที่สนใจ:
ดักลาสคร็อคฟอร์ดไม่ได้ระบุว่าทำไมคุณสมบัติของ JSON จึงไม่อนุญาตให้ใช้เครื่องหมายคำพูดเดี่ยวในสตริง อย่างไรก็ตามในระหว่างการสนทนาของ JSON ในภาคผนวก E ของ JavaScript: The Good Partsเขาเขียน:
เป้าหมายการออกแบบของ JSON นั้นต้องมีความเรียบง่ายพกพาสะดวกข้อความและชุดย่อยของ JavaScript ยิ่งเราต้องตกลงให้น้อยลงเพื่อให้สามารถทำงานร่วมกันได้มากขึ้นเราก็สามารถทำงานร่วมกันได้ง่ายขึ้น
ดังนั้นเขาอาจตัดสินใจอนุญาตเฉพาะสตริงที่จะถูกกำหนดโดยใช้เครื่องหมายคำพูดคู่เนื่องจากนี่เป็นกฎที่น้อยกว่าที่การอิมพลีเมนต์ JSON ทั้งหมดต้องเห็นด้วย ดังนั้นจึงเป็นไปไม่ได้ที่อักขระอัญประกาศเดี่ยวภายในสตริงจะยกเลิกสตริงโดยไม่ตั้งใจเนื่องจากตามคำจำกัดความสตริงสามารถยกเลิกได้ด้วยอักขระเครื่องหมายคำพูดคู่เท่านั้น ดังนั้นจึงไม่จำเป็นต้องอนุญาตให้มีการหลบหนีของอักขระคำพูดเดียวในข้อกำหนดอย่างเป็นทางการ
ขุดนิด ๆ หน่อย ๆ ลึก Crockford ของ
org.jsonการดำเนินงานของ JSON สำหรับ Java ได้รับอนุญาตมากขึ้นและ
ไม่อนุญาตให้มีตัวอักษรคำพูดเดียว:
ข้อความที่ผลิตโดยวิธี toString อย่างเคร่งครัดสอดคล้องกับกฎไวยากรณ์ JSON คอนสตรัคชันให้อภัยมากกว่าในข้อความที่พวกเขาจะยอมรับ:
...
- สายอักขระอาจจะยกมาด้วย '(คำพูดเดียว)
สิ่งนี้ได้รับการยืนยันโดยซอร์สโค้ดJSONTokener nextString
วิธีการยอมรับอักขระอัญประกาศเดี่ยวและใช้กับอักขระเครื่องหมายคำพูดคู่:
public String nextString(char quote) throws JSONException {
char c;
StringBuffer sb = new StringBuffer();
for (;;) {
c = next();
switch (c) {
...
case '\\':
c = this.next();
switch (c) {
...
case '"':
case '\'':
case '\\':
case '/':
sb.append(c);
break;
...
ที่ด้านบนของวิธีการมีความคิดเห็นให้ข้อมูล:
รูปแบบ JSON ที่เป็นทางการไม่อนุญาตให้ใช้สตริงในเครื่องหมายคำพูดเดี่ยว แต่การใช้งานจะได้รับอนุญาตให้ยอมรับได้
ดังนั้นการใช้งานบางอย่างจะยอมรับคำพูดเดียว - แต่คุณไม่ควรพึ่งพาสิ่งนี้ การใช้งานที่ได้รับความนิยมจำนวนมากค่อนข้าง จำกัด ในเรื่องนี้และจะปฏิเสธ JSON ที่มีสตริงที่ยกมาเดี่ยวและ / หรือคำพูดเดียวที่หลบหนี
สุดท้ายที่จะผูกกลับไปที่คำถามเดิมjQuery.parseJSON
พยายามครั้งแรกที่จะใช้ตัวแยกวิเคราะห์ JSON ดั้งเดิมของเบราว์เซอร์หรือห้องสมุดที่โหลดเช่นjson2.jsที่ใช้งานได้ (ซึ่งในบันทึกด้านข้างเป็นห้องสมุดตรรกะ jQuery จะขึ้นอยู่กับถ้าJSON
ไม่ได้กำหนดไว้) . ดังนั้น jQuery สามารถอนุญาตได้เช่นเดียวกับการติดตั้งพื้นฐาน:
parseJSON: function( data ) {
...
// Attempt to parse using the native JSON parser first
if ( window.JSON && window.JSON.parse ) {
return window.JSON.parse( data );
}
...
jQuery.error( "Invalid JSON: " + data );
},
เท่าที่ฉันรู้ว่าการใช้งานเหล่านี้เป็นไปตามข้อกำหนดของ JSON อย่างเป็นทางการเท่านั้นและไม่ยอมรับเครื่องหมายคำพูดเดี่ยวดังนั้น jQuery