Jeśli przekonwertuję powyższy obiekt na JSON za pomocą var jSonString = JSON.stringify(testObject);, jaka jest różnica między 2 (JS obj i JSON)?
JSON to format wymiany danych. Jest to standard opisujący, w jaki sposób uporządkowane listy i nieuporządkowane mapy, ciągi logiczne i liczby mogą być reprezentowane w ciągu. Podobnie jak XML i YAML to sposób przekazywania informacji strukturalnych między językami, JSON jest taki sam. Z drugiej strony obiekt JavaScript jest typem fizycznym. Podobnie jak tablica PHP, klasa / struktura C ++, obiekt JavaScript jest rodzajem wewnętrznym dla JavaScript.
Oto historia. Wyobraźmy sobie, że kupiłeś jakieś meble ze sklepu i chcesz je dostarczyć. W magazynie pozostaje jednak tylko model wyświetlacza, ale zgadzasz się na jego zakup.
W sklepie zakupiona komoda to żywy przedmiot:
var chestOfDrawers = {
color: "red",
numberOfDrawers: 4
}
Nie możesz jednak wysyłać komody z postem, więc ją demontujesz (czytaj, szykuj). Jest teraz bezużyteczny pod względem mebli. Teraz jest JSON. Jest w płaskiej formie.
{"color":"red","numberOfDrawers":4}
Kiedy je otrzymasz, odbudujesz komodę (przeczytaj, przeanalizuj). Teraz jest z powrotem w formie obiektu.
JSON / XML i YAML mają na celu umożliwienie przesyłania danych między językami programowania w formacie zrozumiałym dla obu języków uczestniczących; nie możesz podać PHP lub C ++ bezpośrednio swojego obiektu JavaScript; ponieważ każdy język reprezentuje obiekt inaczej pod maską. Ponieważ jednak podzieliliśmy obiekt na notację JSON; tzn. znormalizowany sposób reprezentacji danych, możemy przesłać reprezentację JSON obiektu do innego języka (C ++, PHP), mogą odtworzyć obiekt JavaScript, który mieliśmy w swoim własnym obiekcie, w oparciu o reprezentację JSON obiektu.
Należy zauważyć, że JSON nie może reprezentować funkcji ani dat. Jeśli spróbujesz skreślić obiekt za pomocą elementu funkcji, funkcja zostanie pominięta w reprezentacji JSON. Data zostanie przekonwertowana na ciąg;
JSON.stringify({
foo: new Date(),
blah: function () {
alert('hello');
}
}); // returns the string "{"foo":"2011-11-28T10:21:33.939Z"}"