Perbedaan antara json.js dan json2.js

87

Dapatkah seseorang memberi tahu saya apa perbedaan antara 2 pengurai JSON?

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

Saya memiliki file JSON dari 2007-04-13 (Ini memiliki metode seperti parseJSON). Saya tidak melihat metode ini di salah satu versi baru.

Yi Jiang
sumber
2
Anda dapat menemukan file baru di sini github.com/douglascrockford/JSON-js
Daniel Little
1
Bagi siapa pun yang datang ke pertanyaan ini bertanya-tanya tentang apa file-file ini, ketahuilah bahwa tidak ada alasan untuk menggunakannya di browser modern. Dari repo GitHub : "Di browser saat ini, [json2.js] tidak melakukan apa pun, lebih memilih objek JSON bawaan. Tidak ada alasan untuk menggunakan file ini kecuali takdir memaksa Anda untuk mendukung IE8, yang merupakan sesuatu yang tidak boleh dilakukan oleh siapa pun harus melakukannya lagi. "
Thunderforge

Jawaban:

59

Dari kode mereka:

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

Saya kira parseJSON sudah usang, oleh karena itu versi baru (json2) bahkan tidak menggunakannya lagi. Namun, jika kode parseJSONAnda banyak digunakan, Anda bisa menambahkan potongan kode ini di suatu tempat untuk membuatnya berfungsi kembali:

    Object.prototype.parseJSON = function (filter) {
        return JSON.parse(this, filter);
    };
Luca Matteis
sumber
1
Terima kasih, jadi tampaknya parseJSON telah diganti dengan JSON.parse? Juga, bagaimana dengan toJSONString? Kode kami yang ada menggunakan banyak metode ini: boolean.toJSONString () date.toJSONString () number.toJSONString () object.toJSONString () string.toJSONString ()
1
Kemudian tambahkan juga potongan kode pertama, semua nilai yang Anda tentukan adalah Objek, oleh karena itu semuanya akan dikonversi untuk menggunakan JSON.stringify secara otomatis.
Luca Matteis
Terima kasih! Saya akan mencoba ini. Jadi, dapatkah saya menambahkan fungsi ini ke file json.js?
"absolete" - absolut atau usang?
Eric
84
"absolut" - jika sudah pasti usang.
davidtbernal
31

Mengutip di sini :

"JSON2.js - Akhir tahun lalu Crockford diam-diam merilis versi baru JSON API-nya yang menggantikan API yang sudah ada. Perbedaan pentingnya adalah Crockford menggunakan satu objek dasar."

paxdiablo
sumber
25

Saya juga memperhatikan bahwa json2 stringified array berbeda dari json2007.

Di json2007:

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

Di json2:

var array = [];
array[1] = "apple";
array[2] = "orange";
alert(JSON.stringify(array)); // Output: [null, "apple", "orange"].
Vimil Saju
sumber
4
json2 benar dalam kasus ini. json2007 salah karena mengabaikan elemen pertama pada indeks 0.
Rob Kinyon