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.


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

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."


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"].

4
json2 benar dalam kasus ini. json2007 salah karena mengabaikan elemen pertama pada indeks 0.
Rob Kinyon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.