Różnica między json.js i json2.js


87

Czy ktoś może mi powiedzieć, jaka jest różnica między 2 parserami JSON?

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

Mam plik JSON z dnia 2007-04-13 (ma takie metody jak parseJSON). Nie widzę tych metod w żadnej z nowych wersji.


2
Możesz znaleźć nowy plik tutaj github.com/douglascrockford/JSON-js
Daniel Little

1
Każdy, kto przyszedł do tego pytania i zastanawiał się, czym są te pliki, wie, że nie ma powodu, aby używać ich w nowoczesnych przeglądarkach. Z repozytorium GitHub : „W obecnych przeglądarkach [json2.js] nic nie robi, preferując wbudowany obiekt JSON. Nie ma powodu, aby używać tego pliku, chyba że los zmusi Cię do obsługi IE8, czego nikt nigdy nie powinien muszę to zrobić ponownie ”.
Thunderforge,

Odpowiedzi:


59

Z ich kodu:

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

Wydaje mi się, że parseJSON jest przestarzały, dlatego nowa wersja (json2) już go nie używa. Jeśli jednak twój kod używa parseJSONdużo, możesz po prostu dodać gdzieś ten fragment kodu, aby znów działał:

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

1
Dzięki, więc wygląda na to, że parseJSON został zastąpiony przez JSON.parse? A co z toJSONString? Nasz istniejący kod wykorzystuje wiele z tych metod: boolean.toJSONString () date.toJSONString () number.toJSONString () object.toJSONString () string.toJSONString ()

1
Następnie dodaj także pierwszy fragment kodu, wszystkie podane wartości są obiektami, dlatego wszystkie zostaną automatycznie przekonwertowane na użycie JSON.stringify.
Luca Matteis

Dzięki! Spróbuję. Czy mogę więc dodać te funkcje do pliku json.js?

„absolutny” - absolutny czy przestarzały?
Eric

84
„absolutne” - kiedy jest zdecydowanie przestarzałe.
davidtbernal

31

Cytując tutaj :

„JSON2.js - pod koniec zeszłego roku Crockford po cichu opublikował nową wersję swojego interfejsu JSON API, która zastąpiła jego istniejący interfejs API. Istotna różnica polegała na tym, że wykorzystywał pojedynczy obiekt bazowy”.


25

Zauważyłem również, że strunifikowane tablice json2 są inne niż json2007.

W json2007:

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

W json2:

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

4
json2 jest poprawna w tym przypadku. json2007 pomylił się, ignorując pierwszy element przy indeksie 0.
Rob Kinyon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.