Apa perbedaan antara JSON dan Object Literal Notation?

220

Dapatkah seseorang memberi tahu saya apa perbedaan utama antara objek JavaScript yang didefinisikan dengan menggunakan Object Literal Notation dan objek JSON ?

Menurut buku JavaScript dikatakan ini adalah objek yang didefinisikan dengan menggunakan Notasi Objek :

var anObject = {
    property1 : true,
    showMessage : function (msg) { alert(msg) }
};

Mengapa bukan objek JSON dalam kasus ini? Hanya karena itu tidak didefinisikan dengan menggunakan tanda kutip?

kue pensil
sumber
20
"Mengapa ini bukan objek JSON dalam kasus ini?": Karena kunci Anda harus berupa string, dan fungsi bukan nilai JSON yang valid.
Matt
3
kemungkinan duplikat Apa perbedaan antara objek JSON dan JavaScript?
Lightness Races in Orbit

Jawaban:

248

Mari kita perjelas dulu apa sebenarnya JSON itu. JSON adalah format pertukaran data tekstual , independen bahasa, seperti XML, CSV atau YAML.

Data dapat disimpan dalam banyak cara, tetapi jika harus disimpan dalam file teks dan dapat dibaca oleh komputer, ia harus mengikuti beberapa struktur. JSON adalah salah satu dari banyak format yang mendefinisikan struktur seperti itu.

Format tersebut biasanya tidak tergantung pada bahasa, artinya dapat diproses oleh Java, Python, JavaScript, PHP, apa saja.

Sebaliknya, JavaScript adalah bahasa pemrograman. Tentu saja JavaScript juga menyediakan cara untuk mendefinisikan / mendeskripsikan data, tetapi sintaksinya sangat spesifik untuk JavaScript.

Sebagai contoh counter, Python memiliki konsep tuple , sintaksnya adalah (x, y). JavaScript tidak memiliki yang seperti ini.


Mari kita lihat perbedaan sintaksis antara literal objek JSON dan JavaScript.

JSON memiliki batasan sintaksis berikut:

  • Obyek kunci harus string (yaitu urutan karakter diapit tanda kutip ganda ").
  • Nilai bisa berupa:
    • Sebuah benang
    • sebuah angka
    • sebuah objek (JSON)
    • sebuah array
    • true
    • false
    • null
  • Kunci duplikat ( {"foo":"bar","foo":"baz"}) menghasilkan hasil yang tidak ditentukan, implementasi khusus; spesifikasi JSON secara khusus tidak mendefinisikan semantiknya

Dalam JavaScript, objek literal dapat memiliki

  • String literal, number literals atau nama pengenal sebagai kunci (karena ES6, kunci sekarang juga dapat dihitung, yang memperkenalkan sintaks lain).
  • Nilai dapat berupa ekspresi JavaScript apa pun yang valid, termasuk definisi fungsi dan undefined.
  • Kunci duplikat menghasilkan hasil yang ditentukan dan ditentukan (dalam mode longgar, definisi terakhir menggantikan yang sebelumnya; dalam mode ketat, ini merupakan kesalahan).

Mengetahui itu, hanya dengan melihat sintaks , contoh Anda bukan JSON karena dua alasan:

  1. Kunci Anda bukan string (literal). Mereka adalah nama pengidentifikasi .
  2. Anda tidak dapat menetapkan fungsi sebagai nilai ke "objek JSON" (karena JSON tidak mendefinisikan sintaks untuk fungsi).

Tetapi yang paling penting, untuk mengulangi penjelasan saya dari awal: Anda berada dalam konteks JavaScript. Anda mendefinisikan objek JavaScript. Jika ada, "objek JSON" hanya dapat dimuat dalam string:

 var obj = {foo: 42}; // creates a JavaScript object (this is *not* JSON)
 var json = '{"foo": 452}'; // creates a string containing JSON

Artinya, jika Anda menulis kode sumber JavaScript, dan tidak berurusan dengan string , Anda tidak berurusan dengan JSON. Mungkin Anda menerima data sebagai JSON (mis., Melalui ajax atau membaca dari file), tetapi begitu Anda atau perpustakaan yang Anda gunakan telah menguraikannya, itu bukan JSON lagi.


Hanya karena objek literal dan JSON terlihat serupa , itu tidak berarti bahwa Anda dapat menamainya secara bergantian. Lihat juga Tidak ada yang namanya "Objek JSON" .

Felix Kling
sumber
8
Perhatikan juga bahwa JSON adalah bagian dari Notasi Objek Obyek
Sean Kinsey
14
@SeanKinsey: Kecuali itu bukan: timelessrepo.com/json-isnt-a-javascript-subset
mpen
1
Mungkin perlu dicatat bahwa biasanya Anda akan mengharapkan objek JavaScript secara literal dalam konteks di mana komentar legal, dan spesifikasi JSON tidak memungkinkan untuk komentar (lihat posting ini .
Brian Henry
kunci dalam objek literal selalu berupa string, meskipun Anda menggunakan "" atau tidak.
overexchange
2
@ overexchange: "kunci dalam objek literal selalu string" Anda mencampur dua hal di sini, tapi saya tidak bisa menyalahkan Anda karena saya juga tidak menarik garis yang jelas di sini. Anda harus membedakan antara objek literal dan nilai objek . Sebuah literal adalah urutan karakter Anda menulis dalam kode sumber. The nilai adalah apa yang diciptakan oleh menafsirkan kode sumber. Objek literal (sintaks) memungkinkan Anda menggunakan nama pengidentifikasi , string string atau literal angka . Anda benar bahwa pada saat runtime, semuanya dikonversi menjadi string (tetapi kami juga memiliki simbol sekarang).
Felix Kling
41

JSON memiliki sintaks yang jauh lebih terbatas termasuk:

  • Nilai kunci harus dikutip
  • String harus dikutip dengan "dan bukan'
  • Anda memiliki rentang nilai yang lebih terbatas (mis. Tidak ada fungsi yang diizinkan)
Quentin
sumber
1
Menyukai ini "tidak ada fungsi Diizinkan".
Karan Kaw
Komentar juga tidak diperbolehkan. Untuk alasan yang dipertanyakan. (Kudengar mereka ditanyai beberapa kali.) Ini adalah perbedaan utama yang saya katakan.
user7610
15

Sebenarnya tidak ada yang namanya "JSON Object".

Spesifikasi JSON adalah sintaksis untuk penyandian data sebagai string. Apa yang orang sebut "Objek JSON" (dalam javascript) sebenarnya hanyalah objek javascript biasa yang (mungkin) telah di-serialkan dari string JSON yang valid, dan dapat dengan mudah diserialisasi ulang sebagai string JSON yang valid. Ini umumnya berarti bahwa itu hanya berisi data (dan bukan fungsi). Ini juga berarti bahwa tidak ada tanggal, karena JSON tidak memiliki tipe tanggal (mungkin hal yang paling menyakitkan tentang JSON;)

Selanjutnya, (kata-kata kasar ...) ketika orang berbicara tentang "Objek JSON", mereka hampir selalu berarti data yang memiliki "kurung kurawal" di tingkat atas. Ini sesuai dengan objek javascript. Namun, spesifikasi JSON tidak mensyaratkan bahwa ada satu objek "kurung kurawal" di tingkat atas string JSON. JSON sangat valid untuk memiliki daftar di tingkat atas, atau bahkan hanya memiliki satu nilai. Jadi, sementara setiap "Objek JSON" sesuai dengan JSON yang valid, tidak semua string JSON yang valid sesuai dengan apa yang kita sebut "Objek JSON"! (karena string dapat mewakili daftar atau nilai atom)

Nick Perkins
sumber
5
Ada kesalahan dalam jawaban Anda: JSON tidak valid memiliki nilai atom di tingkat atas. JSON memungkinkan bagian atas menjadi objek atau array, tetapi tidak ada yang lain. RFC4627 , standar, menggambarkan tata bahasa JSON sebagai JSON-text = object / array.
Rory O'Kane
9

Menurut JSON dalam JavaScript ,

JSON adalah bagian dari notasi objek harafiah dari JavaScript.

Dengan kata lain, JSON yang valid juga merupakan notasi objek JavaScript yang valid tetapi tidak harus sebaliknya.

Selain membaca dokumentasi , seperti yang disarankan @Filix King, saya juga menyarankan untuk bermain-main dengan validator JSON JSONLint online . Begitulah cara saya mengetahui bahwa kunci objek JSON harus berupa string.

ma11hew28
sumber
2
Hanya untuk memperhatikan: Ini bukan bagian yang tepat , ada beberapa string JSON yang tidak valid sebagai objek literal JS
Bergi
5

🔫 JSON : Alternatif Bebas-Lemak untuk XML

JSON telah secara luas diadopsi oleh orang-orang yang menemukan bahwa itu membuatnya lebih mudah untuk menghasilkan aplikasi dan layanan terdistribusi. Jenis media Internet resmi untuk JSON adalah application/json RFC 4627. Nama file JSON menggunakan ekstensi .json.


► JavaScript Object Notation ( JSON) adalah format pertukaran data yang ringan, berbasis teks, dan tidak tergantung bahasa. JSON telah digunakan untuk bertukar data antara aplikasi yang ditulis dalam bahasa Pemrograman apa pun.

Objek JSON adalah objek tunggal yang berisi dua fungsi, parse dan stringify, yang digunakan untuk mem-parsing dan membangun teks JSON.

  • JSON.stringify menghasilkan String yang sesuai dengan tata bahasa JSON berikut.
  • JSON.parse menerima sebuah String yang sesuai dengan tata bahasa JSON.

Metode parseJSON akan dimasukkan ke dalam Fourth Edition of ECMAScript. Sementara itu, implementasi JavaScript tersedia di json.org.

var objLiteral = {foo: 42}; // JavaScript Object
console.log('Object Literal : ', objLiteral ); // Object {foo: 42}foo: 42__proto__: Object

// This is a JSON String, like what you'd get back from an AJAX request.
var jsonString = '{"foo": 452}';
console.log('JOSN String : ', jsonString ); // {"foo": 452}

// This is how you deserialize that JSON String into an Object.
var serverResposnceObject = JSON.parse( jsonString );
console.log('Converting Ajax response to JavaScript Object : ', serverResposnceObject); // Object {foo: 42}foo: 42 __proto__: Object

// And this is how you serialize an Object into a JSON String.
var serverRequestJSON = JSON.stringify( objLiteral );
console.log('Reqesting server with JSON Data : ', serverRequestJSON); // '{"foo": 452}'

JSON adalah bagian dari JavaScript. Javascript berasal dari Standar Bahasa Pemrograman ECMAScript.


► ECMAScript

ECMAScript telah berkembang menjadi salah satu bahasa pemrograman tujuan umum yang paling banyak digunakan di dunia. Ini dikenal sebagai bahasa yang tertanam di browser web tetapi juga telah banyak diadopsi untuk aplikasi server dan tertanam. ECMAScript didasarkan pada beberapa teknologi yang berasal, yang paling terkenal JavaScript(Netscape Communications)) dan JScript(Microsoft Corporation).) . Meskipun sebelum 1994, ECMA dikenal sebagai "Asosiasi Produsen Komputer Eropa", setelah 1994, ketika organisasi menjadi global, "merek dagang" "Ecma" disimpan karena alasan historis.

ECMAScript adalah bahasa, sedangkan JavaScript, JScript, dan bahkan ActionScript disebut "Dialects".

Dialek berasal dari bahasa yang sama. Mereka sangat mirip satu sama lain karena mereka berasal dari bahasa yang sama tetapi mereka telah mengalami beberapa perubahan. Dialek adalah variasi dalam bahasa itu sendiri. Itu berasal dari satu bahasa.

  • Bahasa SQL - Hibernate MySQL Dialect, Oracle Dialect, .. yang memiliki beberapa perubahan atau fungsi tambahan.

Informasi tentang browser dan komputer pengguna Anda.

navigator.appName // "Netscape"

ECMAScript adalah bahasa scripting yang membentuk dasar JavaScript. .JavaScript language resources

ECMA-262 Links
Initial Edition, June 1997 PDF.
2nd Edition, August 1998 PDF.
3rd Edition, December 1999 PDF.
5th Edition, December 2009 PDF.
5.1 Edition, June 2011 HTML.
6th Edition, June 2015 HTML.
7ᵗʰ Edition, June 2016 HTML.
8th edition, June 2017 HTML.
9th Edition, 2018 HTML.

CATATAN « ECMAScript edisi ke-4 yang tidak dipublikasikan karena pekerjaan tidak lengkap .


JSON mendefinisikan seperangkat aturan pemformatan kecil untuk representasi portabel dari data terstruktur.

  1. ► Nilai kunci harus dikutip, hanya String yang diizinkan untuk kunci. Jika Anda menggunakan selain String itu akan dikonversi ke String. Tapi tidak disarankan menggunakan kunci selain String. Lihat contoh seperti ini - { 'key':'val' }selesaiRFC 4627 - jsonformatter

    var storage = {
      0 : null,
      1 : "Hello"
    };
    console.log( storage[1] ); // Hello
    console.log( JSON.stringify( storage ) ); // {"0":null,"1":"Hello","2":"world!"}
    
    var objLiteral = {'key1':'val1'};
        var arr = [10, 20], arr2 = [ 'Yash', 'Sam' ];
        var obj = { k: 'v' }, obj2 = { k2: 'v2' };
        var fun = function keyFun() {} ;
    
    objLiteral[ arr ] = 'ArrayVal';     objLiteral[ arr2 ] = 'OverridenArrayVal';
    objLiteral[ obj ] = 'ObjectVal';    objLiteral[ obj2 ] = 'OverridenObjectVal';
    objLiteral[ fun ] = 'FunctionVal';
    
    console.log( objLiteral );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    console.log( JSON.stringify( objLiteral ) );
    // {"key1":"val1","10,20":"ArrayVal","Yash,Sam":"OverridenArrayVal","[object Object]":"OverridenObjectVal","function keyFun() {}":"FunctionVal"}
    console.log( JSON.parse( JSON.stringify( objLiteral ) ) );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    
    console.log('Accessing Array  Val : ', objLiteral[ [10,20] ] );
    console.log('Accessing Object Val : ', objLiteral[ '[object Object]' ] );
    console.log('Accessing Function Val : ', objLiteral[ 'function keyFun() {}' ] );
  2. ► String JSON harus dikutip dengan "dan bukan '. String sangat mirip dengan string C atau Java. String harus dibungkus dengan tanda kutip ganda.

    • Literal adalah nilai-nilai tetap, bukan variabel, yang benar-benar Anda berikan dalam skrip Anda.
    • String adalah urutan nol atau lebih karakter yang dibungkus dengan tanda kutip dengan pelarian backslash, notasi yang sama digunakan pada sebagian besar bahasa pemrograman.
      • 🔫 - Simbol Khusus diizinkan dalam String tetapi tidak direkomendasikan untuk digunakan.
      • \ "- Karakter khusus dapat diloloskan. Tetapi tidak direkomendasikan untuk melarikan diri (') Kutipan Tunggal. Dalam mode ketat ia akan melempar dan Kesalahan - SyntaxError: Unexpected token ' in JSON

    Periksa dengan kode ini { "Hai\" \n Team 🔫":5, "Bye \'": 7 }melalui Edtion JSON online.ModesnotStrict,Strinct.

    var jsonString = "{'foo': 452}"; // {'foo': 452}
    var jsonStr = '{"foo": 452}'; // {"foo": 452}
    
    JSON.parse( jsonString ); // Unexpected token ' in JSON at position 1(…)
    JSON.parse( jsonStr ); // Object {foo: 452}
    
    objLiteral['key'] = 'val'; // Object {foo: 42, key: "val"}
    objLiteral.key2 = 'val';
    
    // objLiteral.key\n3 - SyntaxError: Invalid or unexpected token
    objLiteral['key\n3'] = 'val'; // Object {"foo": "42", key: "val", key2: "val", "key↵3": "val"}
    
    JSON.stringify( objLiteral ); // {"foo":"42","key":"val","key2":"val","key\n3":"val"}

Accessors Properti Obyek memberikan akses ke properti objek dengan menggunakan notasi titik atau notasi braket.

  1. ► Anda memiliki rentang nilai yang lebih terbatas (mis. Tidak ada fungsi yang diizinkan). Nilai dapat berupa string dalam tanda kutip ganda, angka, boolean, null, objek, atau array. Struktur ini dapat disarangkan.

    var objLiteral = {};
    objLiteral.funKey = function sayHello() {
        console.log('Object Key with function as value - Its outcome message.');
    };
    
    objLiteral['Key'] = 'Val';
    
    console.log('Object Literal Fun : ', objLiteral );
    // Object Literal Fun :  Object {Key: "Val"}Key: "Val"funKey: sayHello()__proto__: Object
    console.log( JSON.stringify( objLiteral ) ); // {"Key":"Val"}

masukkan deskripsi gambar di sini


JavaScriptadalah implementasi standar ECMAScript yang paling populer. Fitur inti Javascript didasarkan pada standar ECMAScript, tetapi Javascript juga memiliki fitur tambahan lainnya yang tidak ada dalam spesifikasi / standar ECMA. Setiap browser memiliki penerjemah JavaScript.

JavaScript adalah bahasa yang diketik secara dinamis. Itu berarti Anda tidak perlu menentukan tipe data dari variabel saat Anda mendeklarasikannya, dan tipe data dikonversi secara otomatis sesuai kebutuhan selama eksekusi skrip.

Literals :

'37' - 7    // 30
'37' + 7    // "377"
+'37' + 7   // 44
+'37'       // 37
'37'        // "37"

parseInt('37');     // 37
parseInt('3.7');    // 3

parseFloat(3.7);    // 3.7

// An alternative method of retrieving a number from a string is with the + (unary plus) operator:
+'3.7'              // 3.7

Object literals RFC 7159

Struktur objek direpresentasikan sebagai sepasang kurung keriting yang mengelilingi nol atau lebih pasangan nama / nilai (atau anggota). Nama adalah sebuah string. Satu titik dua muncul setelah setiap nama, memisahkan nama dari nilai. Satu koma memisahkan nilai dari nama berikut. Nama-nama dalam suatu objek HARUS unik.

ECMAScript mendukung warisan berbasis prototipe. Setiap konstruktor memiliki prototipe terkait, dan setiap objek yang dibuat oleh konstruktor tersebut memiliki referensi implisit ke prototipe (disebut prototipe objek) yang terkait dengan konstruktornya. Lebih jauh, sebuah prototipe mungkin memiliki referensi implisit non-nol ke prototipe-nya, dan seterusnya; ini disebut rantai prototipe.

Dalam bahasa berorientasi objek berbasis kelas, secara umum, negara dilakukan oleh instance, metode dilakukan oleh kelas, dan pewarisan hanya struktur dan perilaku. Dalam ECMAScript, negara dan metode dilakukan oleh objek, dan struktur, perilaku, dan negara semuanya diwariskan.

Prototipe adalah objek yang digunakan untuk mengimplementasikan struktur, status, dan perilaku pewarisan dalam ECMAScript. Ketika konstruktor membuat objek, objek yang secara implisit referensi prototipe terkait konstruktor untuk tujuan menyelesaikan referensi properti. Prototipe terkait konstruktor dapat dirujuk oleh ekspresi program constructor.protype, dan properti yang ditambahkan ke prototipe objek dibagi, melalui pewarisan, oleh semua objek yang berbagi prototipe.

Yash
sumber
2

Bagi mereka yang masih berpikir bahwa RFC lebih penting daripada blog dan kesalahpahaman berdasarkan pendapat, mari kita coba untuk menjelaskan beberapa poin. Saya tidak akan mengulangi semua perbedaan yang benar yang telah disebutkan dalam jawaban sebelumnya, di sini saya hanya mencoba menambahkan nilai meringkas beberapa bagian penting rfc7159

Ekstrak dari https://tools.ietf.org/html/rfc7159

  1. JavaScript Object Notation (JSON) adalah format teks untuk serialisasi data terstruktur. Ini berasal dari objek literal dari JavaScript, sebagaimana didefinisikan dalam ECMAScript Standard Language Language, Edisi Ketiga [ECMA-262].
  2. JSON dapat mewakili empat tipe primitif (string, angka, boolean, dan null) dan dua tipe terstruktur ( objek dan array).
  3. Sebuah objek adalah koleksi unordered dari nol atau lebih pasangan nama / nilai, di mana nama adalah sebuah string dan nilai adalah string, angka, boolean, null, objek , atau array.
  4. begin-object = ws% x7B ws; {braket keriting kiri
  5. end-object = ws% x7D ws; } braket keriting kanan
  6. Nilai JSON HARUS berupa objek , array, angka, atau string, atau salah satu dari tiga nama literal berikut: false null true
  7. Sebuah objek struktur direpresentasikan sebagai sepasang kurung keriting
  8. Nama-nama dalam suatu objek HARUS unik. object = begin-object [anggota * (value-separator member)] objek akhir
  9. Sebuah objek yang namanya semua unik adalah interoperable dalam arti bahwa semua implementasi software menerima bahwa objek akan setuju pada pemetaan nama-nilai. Ketika nama-nama dalam suatu objek tidak unik, perilaku perangkat lunak yang menerima objek tersebut tidak dapat diprediksi.
  10. Contoh (dari halaman 12 dari RFC)

    Ini adalah objek JSON:

          {
            "Image": {
                "Width":  800,
                "Height": 600,
                "Title":  "View from 15th Floor",
                "Thumbnail": {
                    "Url":    "http://www.example.com/image/481989943",
                    "Height": 125,
                    "Width":  100
                },
                "Animated" : false,
                "IDs": [116, 943, 234, 38793]
              }
          }

    Anggota Image-nya adalah objek yang anggota thumbnail-nya adalah objek dan anggota ID-nya adalah array angka.

Sebenarnya tidak ada yang namanya "JSON Object".

Betulkah?

Daniele D.
sumber
1
Davi, ini bukan Object, itu a String. Terima kasih
abu abu
1

Sejauh yang saya mengerti perbedaan utama adalah fleksibilitas .

JSON adalah sejenis pembungkus pada "JavaScript Object Notation" yang memaksa pengguna untuk mematuhi aturan yang lebih ketat untuk mendefinisikan objek. Dan ia melakukan ini dengan membatasi kemungkinan cara deklarasi objek yang disediakan oleh fitur Notasi Objek JavaScript.

Sebagai hasilnya kami memiliki objek yang lebih sederhana dan lebih terstandarisasi yang lebih cocok untuk pertukaran data antar platform.

Jadi pada dasarnya, newObject dalam contoh saya di atas adalah objek yang didefinisikan dengan menggunakan JavaScript Objeect Notation; tetapi ini bukan objek JSON 'valid' karena tidak mengikuti aturan yang disyaratkan standar JSON.

Tautan ini juga cukup membantu: http://msdn.microsoft.com/en-us/library/bb299886.aspx

kue pensil
sumber
2
Tujuan JSON dan notasi objek sangat berbeda: yang pertama hanya digunakan untuk pertukaran data dan yang kedua adalah untuk membuat objek JS untuk penggunaan internal saja. Mereka bukan versi yang semakin ketat dari hal yang sama.
ilyo
0

Pertama, Anda harus tahu apa itu JSON:

Ini adalah format pertukaran data agnostik bahasa. Sintaks JSON terinspirasi oleh notasi JavaScript Object Literal, tetapi ada perbedaan di antara mereka.

Misalnya, dalam JSON semua kunci harus dikutip, sedangkan dalam objek literal ini tidak perlu:

// JSON: {"foo": "bar"}

// Objek literal: var o = {foo: "bar"}; Kutipan tersebut wajib di JSON karena dalam JavaScript (lebih tepatnya dalam ECMAScript 3rd. Edition), penggunaan kata-kata yang dipesan sebagai nama properti tidak diizinkan, misalnya:

var o = {if: "foo"}; // SyntaxError di ES3 While, menggunakan string literal sebagai nama properti (mengutip nama properti) tidak memberikan masalah:

var o = {"if": "foo"}; Jadi untuk "kompatibilitas" (dan mungkin evaluasi mudah?) Tanda kutip adalah wajib.

Tipe data dalam JSON juga dibatasi untuk nilai-nilai berikut:

string number array objek A literal sebagai: true false null Tata bahasa Strings berubah. Mereka harus dibatasi oleh tanda kutip ganda, sedangkan dalam JavaScript, Anda dapat menggunakan tanda kutip tunggal atau ganda secara bergantian.

// JSON Tidak Valid: {"foo": 'bar'} Tata bahasa Bilangan JSON yang diterima juga berubah, dalam JavaScript Anda dapat menggunakan Heksadesimal Literal, misalnya 0xFF, atau (yang terkenal) Oktal Literals misalnya 010. Dalam JSON Anda dapat menggunakan hanya Literal Desimal.

// JSON Tidak Valid: {"foo": 0xFF}

Razi Syed 'Abdi'
sumber
0

Literal Obyek Javascript vs JSON:

  • Sintaks objek objek adalah cara yang sangat mudah untuk membuat objek javascript
  • The JSONbahasa, yang merupakan singkatan dari 'notasi objek Javascript', memiliki sintaks yang berasal dari objek javascript sintaks literal. Ini digunakan sebagai bahasa pemrograman format transfer data tekstual independen.

Contoh:

Notasi objek JS, digunakan dalam JS untuk membuat objek dalam kode dengan mudah:

const JS_Object = {
  1: 2,  // the key here is the number 1, the value is the number 2
  a: 'b', // the key is the string a, the value is the string b
  func: function () { console.log('hi') }
  // the key is func, the value is the function
}

Contoh JSON:

{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
    }
}}

Perbedaan utama:

  • Semua kunci objek di JSON harus berupa string. Dalam Javascript objek kunci bisa berupa string atau angka

  • Semua string dalam JSON harus dikutip dalam "tanda kutip ganda". Sedangkan dalam Javascript, baik harga tunggal maupun ganda, diperbolehkan. Bahkan tanpa tanda kutip dalam notasi objek Javascript kunci objek secara implisit dilemparkan ke string.

  • Dalam JSON fungsi tidak dapat didefinisikan sebagai nilai objek (karena ini adalah Javascript khusus). Dalam Javascript ini sepenuhnya legal.

JSONObjek build Javascript :

JSONobjek dapat dengan mudah dikonversi ke Javascript dan sebaliknya menggunakan JSONobjek bawaan yang ditawarkan Javascript dalam runtime-nya. Sebagai contoh:

const Object = {
  property1: true,
  property2: false,
}; // creating object with JS object literal syntax

const JSON_object = JSON.stringify(Object);  // stringify JS object to a JSON string

console.log(JSON_object); // note that the (string) keys are in double quotes

const JS_object = JSON.parse(JSON_object);  // parse JSON string to JS object

console.log(JS_object.property1, JS_object.property2); 
// accessing keys of the newly created object

Willem van der Veen
sumber
0

Berikut ini satu perbedaan yang mengejutkan: Anda tidak dapat menggunakan undefinedjson dan semua bidang objek dengan nilai yang tidak ditentukan akan hilang setelahnyaJSON.stringify

let object =  { "a": undefined } ;

let badJSON= '{ "a": undefined }';


console.log('valid JS object :', object );
console.log('JSON from object:', JSON.stringify(object) );
console.log('invalid json    :', JSON.parse(badJSON) );

🙈🙉🙊

Kamil Kiełczewski
sumber