ความแตกต่างระหว่าง json.js และ json2.js


87

ใครช่วยบอกหน่อยได้ไหมว่าตัวแยกวิเคราะห์ JSON 2 ตัวแตกต่างกันอย่างไร

https://github.com/douglascrockford/JSON-js/blob/master/json.js
https://github.com/douglascrockford/JSON-js/blob/master/json2.js

ฉันมีไฟล์ JSON ตั้งแต่ปี 2550-04-13 (มีวิธีการเช่นparseJSON) ฉันไม่เห็นวิธีการเหล่านี้ในเวอร์ชันใหม่ ๆ


2
คุณสามารถค้นหาไฟล์ใหม่ได้ที่นี่github.com/douglascrockford/JSON-js
Daniel Little

1
สำหรับใครก็ตามที่สงสัยว่าไฟล์เหล่านี้คืออะไรโปรดทราบว่าไม่มีเหตุผลที่จะใช้ในเบราว์เซอร์สมัยใหม่ จากGitHub repo : "ในเบราว์เซอร์ปัจจุบัน [json2.js] ไม่ทำอะไรเลยเลือกใช้ออบเจ็กต์ JSON ในตัวไม่มีเหตุผลที่จะใช้ไฟล์นี้เว้นแต่โชคชะตาบังคับให้คุณสนับสนุน IE8 ซึ่งเป็นสิ่งที่ไม่มีใครควร ต้องทำใหม่”
Thunderforge

คำตอบ:


59

จากรหัสของพวกเขา:

// Augment the basic prototypes if they have not already been augmented.
// These forms are obsolete. It is recommended that JSON.stringify and
// JSON.parse be used instead.

if (!Object.prototype.toJSONString) {
    Object.prototype.toJSONString = function (filter) {
        return JSON.stringify(this, filter);
    };
    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };
}

ฉันเดาว่า parseJSON ล้าสมัยดังนั้นเวอร์ชันใหม่ (json2) จึงไม่ได้ใช้งานอีกต่อไป อย่างไรก็ตามหากรหัสของคุณใช้parseJSONมากคุณสามารถเพิ่มส่วนของโค้ดนี้ที่ใดก็ได้เพื่อให้ใช้งานได้อีกครั้ง

    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };

1
ขอบคุณดูเหมือนว่า parseJSON ถูกแทนที่ด้วย JSON.parse? แล้ว toJSONString ล่ะ? รหัสที่มีอยู่ของเราใช้วิธีการเหล่านี้จำนวนมาก: boolean.toJSONString () date.toJSONString () number.toJSONString () object.toJSONString () string.toJSONString ()

1
จากนั้นเพิ่มโค้ดชิ้นที่ 1 ค่าทั้งหมดที่คุณระบุคือ Objects ดังนั้นค่าทั้งหมดจะถูกแปลงเป็น JSON.stringify โดยอัตโนมัติ
Luca Matteis

ขอบคุณ! ฉันจะลองดู ดังนั้นฉันสามารถเพิ่มฟังก์ชันเหล่านี้ในไฟล์ json.js ได้หรือไม่?

"absolete" - แน่นอนหรือล้าสมัย?
Eric

84
"absolete" - เมื่อมันล้าสมัยแน่นอน
davidtbernal

31

อ้างที่นี่ :

"JSON2.js - เมื่อปลายปีที่แล้ว Crockford เปิดตัว JSON API เวอร์ชันใหม่อย่างเงียบ ๆ ซึ่งแทนที่ API ที่มีอยู่ข้อแตกต่างที่สำคัญคือใช้ออบเจ็กต์ฐานเดียว"


25

ฉันสังเกตด้วยว่าอาร์เรย์สตริง json2 แตกต่างจาก json2007

ใน json2007:

var array = [];
array[1] = "apple";
array[2] = "orange";
alert(array.toJSONString()); // Output: ["apple", "orange"].

ใน json2:

var array = [];
array[1] = "apple";
array[2] = "orange";
alert(JSON.stringify(array)); // Output: [null, "apple", "orange"].

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