Apa itu JSON dan mengapa saya menggunakannya?

542

Saya telah melihat di wikipedia dan meng-Google-nya dan membaca dokumentasi resmi, tetapi saya masih belum sampai pada titik di mana saya benar-benar mengerti apa itu JSON, dan mengapa saya menggunakannya.

Saya telah membangun aplikasi menggunakan PHP, MySQL dan Javascript / HTML untuk sementara waktu, dan jika JSON dapat melakukan sesuatu untuk membuat hidup saya lebih mudah atau kode saya lebih baik atau antarmuka pengguna saya lebih baik, maka saya ingin mengetahuinya. Adakah yang bisa memberi saya penjelasan singkat?

Ben
sumber
2
JSON adalah bagian dari YAML yaml.org
Brad Gilbert
15
copterlabs.com/blog/json-what-it-is-how-it-works-how-to-use-it ini adalah contoh penggunaan langsung yang bagus
Tom
1
Baca juga tentang I-JSON: tbray.org/ongoing/When/201x/2015/03/23/i-json
Christophe
1
+ Brad Gilbert Tidak juga - itu cara sendiri untuk mengekspresikan data, dan mirip dengan JSON hanya karena keduanya mengekspresikan objek sebagai string (mirip dengan XML atau daftar atau banyak lainnya), tetapi JSON lebih baik untuk penulisan mesin dan YAML untuk penulisan manusia .
Ben Aubin

Jawaban:

649

JSON (JavaScript Object Notation) adalah format ringan yang digunakan untuk pertukaran data. Ini didasarkan pada subset dari bahasa JavaScript (cara objek dibangun dalam JavaScript). Sebagaimana dinyatakan dalam MDN , beberapa JavaScript bukan JSON, dan beberapa JSON bukan JavaScript.

Contoh penggunaan ini adalah tanggapan layanan web. Di masa lalu, layanan web menggunakan XML sebagai format data utama untuk mengirim kembali data, tetapi sejak JSON muncul ( Format JSON ditentukan dalam RFC 4627 oleh Douglas Crockford ), ia telah menjadi format yang disukai karena jauh lebih banyak ringan

Anda dapat menemukan lebih banyak info di situs web JSON resmi .

JSON dibangun di atas dua struktur:

  • Kumpulan pasangan nama / nilai. Dalam berbagai bahasa, ini diwujudkan sebagai objek, catatan, struct, kamus, tabel hash, daftar kunci, atau array asosiatif.
  • Daftar nilai yang diurutkan. Dalam sebagian besar bahasa, ini diwujudkan sebagai array, vektor, daftar, atau urutan.

Struktur JSON



Diagram objek JSON

Diagram array JSON

Diagram Nilai JSON

Diagram string JSON

Diagram Nomor JSON

Berikut adalah contoh data JSON:

{
     "firstName": "John",
     "lastName": "Smith",
     "address": {
         "streetAddress": "21 2nd Street",
         "city": "New York",
         "state": "NY",
         "postalCode": 10021
     },
     "phoneNumbers": [
         "212 555-1234",
         "646 555-4567"
     ]
 }

JSON dalam JavaScript

JSON (dalam Javascript) adalah string!

Orang sering menganggap semua objek Javascript adalah JSON dan JSON adalah objek Javascript. Ini salah.

Dalam Javascript var x = {x:y}adalah tidak JSON , ini adalah objek Javascript . Keduanya bukan hal yang sama. Setara JSON (diwakili dalam bahasa Javascript) akan var x = '{"x":"y"}'. xadalah objek tipe string bukan objek di dalamnya sendiri. Untuk mengubahnya menjadi objek Javascript yang lengkap, Anda harus menguraikannya var x = JSON.parse('{"x":"y"}');,, xsekarang menjadi objek tetapi ini bukan JSON lagi.

Lihat objek Javascript Vs JSON


Saat bekerja dengan JSON dan JavaScript, Anda mungkin tergoda untuk menggunakan evalfungsi untuk mengevaluasi hasil yang dikembalikan dalam panggilan balik, tetapi ini tidak disarankan karena ada dua karakter (U + 2028 & U + 2029) yang valid dalam JSON tetapi tidak dalam JavaScript (baca lebih lanjut tentang ini di sini ).

Oleh karena itu, kita harus selalu mencoba menggunakan skrip Crockford yang memeriksa JSON yang valid sebelum mengevaluasinya. Tautan ke penjelasan skrip ditemukan di sini dan di sini adalah tautan langsung ke file js. Setiap browser utama saat ini memiliki implementasi sendiri untuk ini.

Contoh tentang cara menggunakan parser JSON (dengan json dari cuplikan kode di atas):

//The callback function that will be executed once data is received from the server
var callback = function (result) {
    var johnny = JSON.parse(result);
    //Now, the variable 'johnny' is an object that contains all of the properties 
    //from the above code snippet (the json example)
    alert(johnny.firstName + ' ' + johnny.lastName); //Will alert 'John Smith'
};

Parser JSON juga menawarkan metode lain yang sangat berguna stringify,. Metode ini menerima objek JavaScript sebagai parameter, dan menampilkan kembali string dengan format JSON. Ini berguna ketika Anda ingin mengirim data kembali ke server:

var anObject = {name: "Andreas", surname : "Grech", age : 20};
var jsonFormat = JSON.stringify(anObject);
//The above method will output this: {"name":"Andreas","surname":"Grech","age":20}

Dua metode di atas ( parsedan stringify) juga mengambil parameter kedua, yang merupakan fungsi yang akan dipanggil untuk setiap kunci dan nilai pada setiap tingkat hasil akhir, dan setiap nilai akan diganti oleh hasil dari fungsi yang Anda masukkan. (Lebih lanjut tentang ini di sini )

Btw, untuk Anda semua di luar sana yang berpikir JSON hanya untuk JavaScript, lihat posting ini yang menjelaskan dan mengonfirmasi sebaliknya.


Referensi

Andreas Grech
sumber
1
Terlepas dari cara informasi serial, Anda akan memiliki parser, bukan? Karena itu, siapa yang peduli format apa yang Anda gunakan untuk mengirimkan data jika detail implementasinya akan diabstraksi.
Tom Lehman
6
Sebenarnya, jika Anda mengirim data ke sana kemari klien dan server, saya pikir cukup penting untuk berhati-hati dengan ukuran respons Anda.
Andreas Grech
9
Untuk yang bertele-tele, ada beberapa karakter yang ditangani JSON berbeda dari JavaScript, mencegahnya menjadi subset ketat: timelessrepo.com/json-isnt-a-javascript-subset
Jeremy Banks
Ketika Anda mengatakan itu lebih ringan dari XML, apakah Anda mengacu pada filesize atau apakah ringan memiliki arti spasial dalam pengkodean?
whatahitson
1
Jadi, apakah Anda akan mengganti XML dengan JSON? Itukah yang kamu katakan? Jika demikian ... Hebat, xml adalah mimpi buruk.
James111
66

Konsep Dijelaskan - Tanpa Kode atau Jargon Teknis

Apa itu JSON? - Bagaimana saya menjelaskannya kepada istri saya TM

Saya: “Ini pada dasarnya cara berkomunikasi dengan seseorang secara tertulis .... tetapi dengan aturan yang sangat spesifik.

Istri: ya ....?

Saya: Dalam bahasa Inggris biasa, aturannya cukup longgar: seperti halnya dengan pertempuran kandang. Tidak demikian halnya dengan JSON. Ada banyak cara untuk menggambarkan sesuatu:

• Contoh 1: Keluarga kami memiliki 4 orang: Anda, saya dan 2 anak-anak.

• Contoh 2: Keluarga kami: Anda, saya, kid1 dan kid2.

• Contoh 3: Keluarga: [kamu, aku, kid1, kid2]

• Contoh 4: kami memiliki 4 orang di keluarga kami: ibu, ayah, anak1 dan anak2.

Istri: Mengapa mereka tidak menggunakan bahasa Inggris saja?

Saya: Mereka mau, tapi ingat kita berurusan dengan komputer. Komputer itu bodoh dan tidak akan bisa memahami kalimat. Jadi kita harus benar-benar spesifik ketika komputer terlibat kalau tidak mereka akan bingung. Terlebih lagi, JSON adalah cara komunikasi yang cukup efisien, sehingga sebagian besar hal-hal yang tidak relevan terputus, yang mana hal ini sangat mudah dilakukan. Jika Anda ingin berkomunikasi dengan keluarga kami, ke komputer, salah satu cara Anda dapat melakukannya adalah seperti ini:

{
                "Family" :  ["Me", "Wife", "Kid1", "Kid2"] 
}

…… dan itu pada dasarnya adalah JSON. Tapi ingat, Anda HARUS mematuhi aturan tata bahasa JSON. Jika Anda melanggar aturan itu, maka komputer tidak akan mengerti (mis. Menguraikan) apa yang Anda tulis.

Istri: Jadi bagaimana saya menulis di Json?

Cara yang baik adalah dengan menggunakan serialson json - yang merupakan perpustakaan yang melakukan angkat berat untuk Anda.

Ringkasan

JSON pada dasarnya adalah cara mengkomunikasikan data kepada seseorang, dengan aturan yang sangat, sangat spesifik. Menggunakan Pasangan Nilai Utama dan Array. Ini adalah konsep yang dijelaskan, pada titik ini ada baiknya membaca aturan khusus di atas.

BKSpurgeon
sumber
48

Singkatnya - JSON adalah cara membuat serialisasi sedemikian rupa, sehingga menjadi kode JavaScript. Ketika dijalankan (dengan eval atau lainnya), kode ini membuat dan mengembalikan objek JavaScript yang berisi data yang Anda serialkan. Ini tersedia karena JavaScript memungkinkan sintaks berikut:

var MyArray = [ 1, 2, 3, 4]; // MyArray is now an array with 4 elements
var MyObject = {
    'StringProperty' : 'Value',
    'IntProperty' : 12,
    'ArrayProperty' : [ 1, 2, 3],
    'ObjectProperty' : { 'SubObjectProperty': 'SomeValue' }
}; // MyObject is now an object with property values set.

Anda dapat menggunakan ini untuk beberapa tujuan. Pertama, ini adalah cara yang nyaman untuk meneruskan data dari server Anda ke kode JavaScript Anda. Jadi, ini sering digunakan dalam AJAX.

Anda juga dapat menggunakannya sebagai mekanisme serialisasi mandiri, yang lebih sederhana dan membutuhkan ruang lebih sedikit daripada XML. Ada banyak pustaka yang memungkinkan Anda untuk membuat serial dan deserialize objek di JSON untuk berbagai bahasa pemrograman.

Vilx-
sumber
31

Singkatnya, ini adalah notasi scripting untuk meneruskan data tentang. Dalam beberapa hal alternatif untuk XML, secara native mendukung tipe data dasar, array dan array asosiatif (pasangan nama-nilai, disebut Objects karena itulah yang mereka wakili).

Sintaksnya yang digunakan dalam JavaScript dan JSON sendiri adalah singkatan dari "JavaScript Object Notation". Namun itu telah menjadi portabel dan digunakan dalam bahasa lain juga.

Tautan yang berguna untuk detail ada di sini:

http://secretgeek.net/json_3mins.asp

mson
sumber
19

Format JSON sering digunakan untuk membuat cerita bersambung dan mengirimkan data terstruktur melalui koneksi jaringan. Ini digunakan terutama untuk mengirimkan data antara server dan aplikasi web, berfungsi sebagai alternatif untuk XML.

Pinakin Nayi
sumber
16

JSON adalah Notasi Objek JavaScript. Ini adalah cara yang jauh lebih kompak untuk mentransmisikan set data melalui koneksi jaringan dibandingkan dengan XML. Saya menyarankan JSON digunakan dalam aplikasi seperti AJAX mana XML seharusnya menjadi opsi "direkomendasikan". Verbositas XML akan menambah waktu pengunduhan dan peningkatan konsumsi bandwidth ($$$). Anda dapat mencapai efek yang sama dengan JSON dan mark-up-nya hampir secara eksklusif didedikasikan untuk data itu sendiri dan bukan struktur yang mendasarinya.

Nolte
sumber
11

jawaban singkat umum adalah: jika Anda menggunakan AJAX untuk membuat permintaan data, Anda dapat dengan mudah mengirim dan mengembalikan objek sebagai string JSON. Ekstensi yang tersedia untuk dukungan Javascript toJSON () memanggil semua jenis javascript untuk mengirim data ke server dalam permintaan AJAX. Respons AJAX dapat mengembalikan objek sebagai string JSON yang dapat dikonversi menjadi objek Javascript dengan panggilan eval sederhana, misalnya jika fungsi AJAX someAjaxFunctionCallReturningJson dikembalikan

"{ \"FirstName\" : \"Fred\", \"LastName\" : \"Flintstone\" }"

Anda bisa menulis dalam Javascript

var obj = eval("(" + someAjaxFunctionCallReturningJson().value + ")");
alert(obj.FirstName);
alert(obj.LastName);

JSON juga dapat digunakan untuk payload layanan web dan lain-lain, tetapi sangat nyaman untuk hasil AJAX.

  • Pembaruan (sepuluh tahun kemudian): Jangan lakukan ini, gunakan JSON.parse
Steven A. Lowe
sumber
1
Dengan eval (), apa pun akan dievaluasi. itu risiko keamanan.
Thomas Weller
@ ThomasWeller ya jawaban ini kuno, saya akan pergi dengan JSON.parse sekarang terima kasih!
Steven A. Lowe
8

Saya suka JSON terutama karena sangat singkat . Untuk konten web yang dapat di-gzip, ini tidak berarti masalah besar (karenanya mengapa x html sangat populer). Tetapi ada saat-saat di mana ini bisa bermanfaat.

Sebagai contoh, untuk satu proyek saya mengirimkan informasi yang perlu diserialisasi dan ditransmisikan melalui XMPP . Karena sebagian besar server akan membatasi jumlah data yang dapat Anda kirimkan dalam satu pesan, saya merasa terbantu menggunakan JSON daripada alternatif yang jelas, XML.

Sebagai bonus tambahan, jika Anda terbiasa dengan Python atau Javascript, Anda sudah cukup mengenal JSON dan dapat menafsirkannya tanpa banyak pelatihan sama sekali.

Jason Baker
sumber
8

Apa itu JSON?

JavaScript Object Notation (JSON) adalah format pertukaran data ringan yang terinspirasi oleh objek literal dari JavaScript.

Nilai JSON dapat terdiri dari:

objek (koleksi pasangan nama-nilai) array (daftar nilai yang terurut) string (dalam tanda kutip ganda) angka benar, salah, atau nol

JSON independen terhadap bahasa.

JSON dengan PHP?

Setelah PHP Versi 5.2.0, ekstensi JSON didekodekan dan menyandikan fungsi sebagai default.

Json_encode - mengembalikan representasi nilai JSON Json_decode - Mendekode String JSON Json_last_error - Mengembalikan kesalahan terakhir yang terjadi.

Sintaks dan Aturan JSON?

Sintaks JSON berasal dari sintaksis notasi objek JavaScript:

Data dalam pasangan nama / nilai Data dipisahkan oleh koma Kurva kurung menahan benda kurung kurung

Elangovan
sumber
4

Kami harus melakukan proyek di kampus dan kami menghadapi masalah yang sangat besar, itu disebut Kebijakan Asal yang Sama. Amog hal-hal lain, itu membuat metode XMLHttpRequest Anda dari Javascript tidak dapat membuat permintaan ke domain selain domain tempat situs Anda aktif.

Misalnya, Anda tidak dapat mengajukan permintaan ke www.otherexample.com jika situs Anda ada di www.example.com. JSONRequest memungkinkan itu, tetapi Anda akan mendapatkan hasil dalam format JSON jika situs itu mengizinkannya (misalnya ia memiliki layanan web yang mengembalikan pesan dalam JSON). Itu adalah salah satu masalah di mana Anda bisa menggunakan JSON mungkin.

Berikut ini sesuatu yang praktis: Yahoo JSON

gljivar
sumber
4

Perbedaan antara JSON dan sintaksis konvensional adalah sebagai berikut (dalam Javascript)

Konvensional

 function Employee(name, Id, Phone, email){

      this.name = name;
      this.Id = Id;
      this.Phone = Phone;
      this.email = email;
  }

  //access or call it as 

var Emp = new Employee("mike","123","9373849784","[email protected]");

Dengan JSON

jika kita menggunakan JSON kita dapat mendefinisikan dengan cara yang berbeda sebagai

  function Employee(args){

   this.name = args.name;
   this.Id = args.Id;
   this.Phone = args.Phone;
   this.email = args.email;
}

//now access this as...

var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});

Hal penting yang harus kita ingat adalah bahwa, jika kita harus membangun kelas atau modal "Karyawan" dengan 100 elemen tanpa metode JSON kita harus menguraikan semuanya saat membuat kelas. Tetapi dengan JSON kita dapat mendefinisikan objek sebaris hanya ketika objek baru untuk kelas didefinisikan.

jadi baris di bawah ini adalah cara melakukan sesuatu dengan JSON (hanya cara sederhana untuk mendefinisikan sesuatu)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'[email protected]'});
Ganesh Vellanki
sumber
2
Itu bukan JSON - ini adalah Objek Javascript (bukan JSON)
Ben Aubin
4

Kadang-kadang teknis diberikan ketika tidak ada yang diperlukan, dan sementara banyak jawaban terpilih secara teknis dan spesifik, saya pribadi tidak berpikir mereka lebih mudah dipahami, atau ringkas, seperti yang dapat ditemukan di Wikipedia, atau di dokumentasi resmi.

Cara saya suka berpikir tentang JSON persis seperti itu - bahasa dalam dunia bahasa yang berbeda. Namun, perbedaan antara JSON dan bahasa lain adalah "semua orang" berbicara "JSON, bersama dengan" bahasa ibu mereka ".

Menggunakan contoh dunia nyata, mari kita berpura-pura memiliki tiga orang. Satu orang berbicara Igbo sebagai bahasa ibu mereka. Orang kedua ingin berinteraksi dengan orang pertama, namun, orang pertama berbicara Yoruba sebagai bahasa pertama mereka.

Apa yang bisa kita lakukan?

Syukurlah, orang ketiga dalam contoh kita tumbuh berbicara dalam bahasa Inggris, tetapi juga berbicara baik Igbo dan Yoruba sebagai bahasa kedua, dan karenanya dapat bertindak sebagai perantara antara dua individu pertama.

Dalam dunia pemrograman, "orang" pertama adalah Python, "orang" kedua adalah Ruby, dan "orang" ketiga adalah JSON, yang kebetulan dapat "menerjemahkan" Ruby ke Python dan sebaliknya! Sekarang jelas analogi ini bukan yang sempurna, tetapi, sebagai seseorang yang bilingual, saya percaya ini adalah cara mudah untuk melihat bagaimana JSON berinteraksi dengan bahasa pemrograman lain.

Jerel
sumber
2

Ini sangat sederhana. JSON adalah singkatan dari Java Script Object Notation. Anggap saja sebagai alternatif untuk menggunakan XML untuk mentransfer data antar komponen perangkat lunak.

Sebagai contoh, saya baru-baru ini menulis banyak layanan web yang mengembalikan JSON, dan beberapa pengembang Javascript kemudian menulis kode yang disebut layanan dan mengkonsumsi informasi yang dikembalikan dalam format itu.

Jon
sumber
2

JSON (notasi objek Javascript) adalah format data yang ringan untuk pertukaran / transfer data. Pasangan nilai kunci-nya seperti JavaScript. Untuk REST API, ini banyak digunakan untuk transfer data dari server ke klien. Saat ini banyak situs media sosial menggunakan ini. Meskipun saya tidak melihat ini sekuat XML sehubungan dengan tipe data. XML memiliki tipe data dan XSD yang sangat kaya. JSON agak kurang dalam hal ini.

Untuk jumlah data string yang sama, JSON akan lebih ringan dibandingkan dengan XML karena XML memiliki semua tag pembuka dan penutup, dll ...

Shailendra Singh
sumber
0

Dalam konteks Java, salah satu alasan mengapa JSON mungkin ingin digunakan, adalah bahwa JSON dapat memberikan alternatif yang sangat baik untuk kerangka Serialisasi Java, yang telah (secara historis) ditunjukkan memiliki beberapa kerentanan yang cukup serius.

Joshua Bloch membahas hal ini secara mendalam dalam Butir 85 "Memilih Alternatif untuk Serialisasi Java" (Efektif Java 3rd Edition)

Serialisasi Java awalnya dimaksudkan untuk menerjemahkan struktur data ke dalam format yang dapat dengan mudah dikirim atau disimpan. JSON memenuhi persyaratan ini, tanpa eksploitasi serius yang disebutkan di atas.

johnm
sumber
-3

Coba kode berikut untuk mem-parsing respons json php Anda: read.php

<script
  src="https://code.jquery.com/jquery-3.2.1.min.js"
  integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
  crossorigin="anonymous"></script>
<script type="text/javascript">  
$.ajax({
    url:'index.php',
    data:{},
    type:"POST",
    success:function(result) {
        jsondecoded = $.parseJSON(result);
        $.each(jsondecoded, function(index, value) {
            $("#servers").text($("#servers").text() + " " + value.servername);
            console.log(value.start);
            console.log(value.end);
            console.log(value.id);
        });
    },
    statusCode: {
    404: function() {
      alert( "page not found" );
    }
  }
});
</script>

server.php

<?php 
echo '[{"start":"2017-08-29","end":"2017-09-01","id":"22"},{"start":"2017-09-03","end":"2017-09-06","id":"23"}]';
?>
amit rawat
sumber
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang bagaimana dan / atau mengapa memecahkan masalah akan meningkatkan nilai jangka panjang jawaban.
Nic3500