JSON nedir ve neden kullanmalıyım?


542

Wikipedia'ya baktım ve Google'ı aradım ve resmi belgeleri okudum, ancak hâlâ JSON'un ne olduğunu ve neden kullanacağımı anladığım noktaya henüz ulaşmadım.

Bir süredir PHP, MySQL ve Javascript / HTML kullanarak uygulamalar geliştiriyorum ve JSON hayatımı kolaylaştırmak veya kodumu daha iyi veya kullanıcı arayüzümü daha iyi hale getirmek için bir şey yapabilirse, o zaman bunu bilmek istiyorum. Birisi bana özlü bir açıklama yapabilir mi?




1
Ayrıca I-JSON hakkında da okuyun: tbray.org/ongoing/When/201x/2015/03/23/i-json
Christophe Roussy

1
+ Brad Gilbert Gerçekten değil - bu verileri ifade etmenin kendi yoludur ve JSON'a benzerdir, çünkü her ikisi de nesneleri dizeler olarak ifade ettikleri için (XML veya plistlere veya diğerlerine benzer şekilde), ancak JSON makine yazmak için daha iyidir ve insan yazmak için YAML .
Ben Aubin

Yanıtlar:


649

JSON (JavaScript Nesne Gösterimi), veri alışverişi için kullanılan hafif bir biçimdir. JavaScript dilinin bir alt kümesine dayanır (nesnelerin JavaScript'te oluşturulma şekli). MDN'de belirtildiği gibi , bazı JavaScript JSON ve bazı JSON JavaScript değildir.

Bunun kullanıldığı yerlere örnek olarak web hizmetleri yanıtları verilebilir. 'Eski' günlerde web hizmetleri, verileri geri aktarmak için birincil veri biçimi olarak XML kullandı, ancak JSON göründüğünden ( JSON biçimi RFC 4627'de Douglas Crockford tarafından belirtildi ), çok daha fazla olduğu için tercih edilen biçimdi hafif

Resmi JSON web sitesinde çok daha fazla bilgi bulabilirsiniz .

JSON iki yapı üzerine kurulmuştur:

  • Bir isim / değer çifti koleksiyonu. Çeşitli dillerde, bu bir nesne, kayıt, yapı, sözlük, karma tablosu, anahtarlı liste veya ilişkilendirilebilir dizi olarak gerçekleştirilir.
  • Sıralı değerler listesi. Çoğu dilde bu bir dizi, vektör, liste veya dizi olarak gerçekleştirilir.

JSON Yapısı



JSON Nesne diyagramı

JSON Dizi diyagramı

JSON Değer diyagramı

JSON Dize diyagramı

JSON Sayı diyagramı

JSON verilerinin bir örneği:

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

JavaScript'te JSON

JSON (Javascript'te) bir dizedir!

İnsanlar genellikle tüm Javascript nesnelerinin JSON olduğunu ve JSON'un bir Javascript nesnesi olduğunu varsayar. Bu yanlış.

In JavaScript var x = {x:y}olduğunu JSON değil , bu bir JavaScript nesnesi . İkisi aynı şey değil. (Javascript dilinde temsil edilen) JSON eşdeğeri olacaktır var x = '{"x":"y"}'. stringx türünde bir nesne, kendi başına bir nesne değildir. Önce onu ayrıştırmak gerekir tam teşekküllü JavaScript nesnesine bu açmak için , şimdi bir nesnedir ama bu artık JSON değil.var x = JSON.parse('{"x":"y"}');x

Bkz. Javascript nesnesi Vs JSON


JSON ve JavaScript ile çalışırken eval, geri aramada döndürülen sonucu değerlendirmek için işlevi kullanmaya cazip gelebilirsiniz , ancak JSON'da geçerli olan ancak JavaScript'te olmayan iki karakter (U + 2028 ve U + 2029) olduğu için bu önerilmez. (daha fazlasını buradan okuyabilirsiniz ).

Bu nedenle, Crockford'un geçerli bir JSON'u kontrol etmeden önce komut dosyasını kullanmaya çalışması gerekir. Komut dosyası açıklama bağlantısı burada bulunur ve burada js dosyasına doğrudan bir bağlantı vardır . Günümüzde her büyük tarayıcının bunun için kendi uygulaması vardır .

JSON ayrıştırıcısının nasıl kullanılacağına ilişkin örnek (yukarıdaki kod snippet'indeki json ile):

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

JSON ayrıştırıcısı başka bir çok yararlı yöntem de sunuyor stringify. Bu yöntem, bir JavaScript nesnesini parametre olarak kabul eder ve JSON biçiminde bir dize döndürür. Verileri sunucuya geri göndermek istediğinizde kullanışlıdır :

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}

Yukarıdaki iki yöntem ( parseve stringify) ayrıca, nihai sonucun her düzeyinde her anahtar ve değer için çağrılacak bir işlev olan ikinci bir parametre alır ve her değer, girilen işlevinizin sonucu ile değiştirilir. ( Burada daha fazlası )

Btw, hepiniz dışarı ilişkin JSON bakın sadece JavaScript için orada düşünenler bu yazıyı başka türlü açıklıyor ve onaylar.


Referanslar


1
Bilgilerin serileştirilme şekli ne olursa olsun, bir ayrıştırıcıya sahip olacaksınız, değil mi? Bu nedenle, uygulama ayrıntıları soyutlanacaksa, veri iletmek için hangi biçimi kullandığınızı kimin umursar.
Tom Lehman

6
Aslında, istemci ve sunucuya veri gönderiyorsanız, yanıt boyutlarınıza dikkat etmenin çok önemli olduğunu düşünüyorum.
Andreas Grech

9
Bilgiçlik için, JSON'un JavaScript'ten farklı şekilde işlediği ve katı bir alt küme olmasını engelleyen birkaç karakter vardır: timelessrepo.com/json-isnt-a-javascript-subset
Jeremy Banks

XML'den daha hafif olduğunu söylediğinizde, dosya boyutuna mı atıfta bulunuyorsunuz ya da hafifliğin kodlamada uzaysal bir anlamı var mı?
whatahitson

1
XML'i JSON ile değiştirir misiniz? Söylediğin bu mu? Eğer öyleyse ... Harika, xml bir kabus.
James111

66

Açıklanan Kavram - Kod veya Teknik Jargon Yok

JSON nedir? - Karım TM 'a nasıl açıkladım?

Ben: “Temelde birisiyle yazılı olarak iletişim kurmanın bir yolu ... ama çok özel kurallarla.

Karısı: evet ....?

Ben: İngilizcede İngilizcede kurallar oldukça gevşek: tıpkı kafes dövüşlerinde olduğu gibi. JSON için durum böyle değil. Bir şeyi tanımlamanın birçok yolu vardır:

• Örnek 1: Ailemizde 4 kişi var: Siz, ben ve 2 çocuk.

• Örnek 2: Ailemiz: siz, ben, çocuk1 ve çocuk2.

• Örnek 3: Aile: [siz, ben, kid1, kid2]

• Örnek 4: Ailemizde 4 kişi var: anne, baba, çocuk1 ve çocuk2.

Karısı: Neden bunun yerine sadece düz İngilizce kullanmıyorlar?

Ben: Yapacaklardı, ama bilgisayarlarla uğraştığımızı hatırlayın. Bir bilgisayar aptalca ve cümleleri anlayamayacak. Bu yüzden bilgisayarlar dahil olduğunda gerçekten spesifik olmalıyız, aksi takdirde kafaları karışır. Dahası, JSON iletişim kurmanın oldukça verimli bir yoludur, bu nedenle alakasız şeylerin çoğu kesilir, bu da oldukça elidir. Ailemizi bir bilgisayara iletmek istiyorsanız, bunu yapmanın bir yolu şöyledir:

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

…… ve bu temelde JSON. Ancak unutmayın, JSON dilbilgisi kurallarına uymalısınız. Bu kuralları ihlal ederseniz, bilgisayar ne yazdığınızı anlamaz (yani ayrıştırmaz).

Karısı: Peki Json'da nasıl yazarım?

İyi bir yol, sizin için ağır kaldırma yapan bir kütüphane olan bir json serileştirici kullanmak olacaktır.

özet

JSON temel olarak çok, çok özel kurallarla verileri birisine iletmenin bir yoludur. Anahtar / Değer Çiftlerini ve Dizileri Kullanma. Açıklanan kavram budur, bu noktada yukarıdaki belirli kuralları okumaya değer.


48

Kısacası - JSON, JavaScript kodu haline gelecek şekilde serileştirmenin bir yoludur. Yürütüldüğünde (eval veya başka bir yöntemle), bu kod serileştirdiğiniz verileri içeren bir JavaScript nesnesi oluşturur ve döndürür. JavaScript aşağıdaki sözdizimine izin verdiği için bu kullanılabilir:

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.

Bunu birkaç amaç için kullanabilirsiniz. Birincisi, sunucunuzun arka ucundan JavaScript kodunuza veri aktarmanın rahat bir yoludur. Bu nedenle, bu genellikle AJAX'ta kullanılır.

Ayrıca, XML'den daha basit ve daha az yer kaplayan bağımsız bir serileştirme mekanizması olarak da kullanabilirsiniz. Çeşitli programlama dilleri için JSON'daki nesneleri serileştirmenize ve serileştirmesine izin veren birçok kütüphane bulunmaktadır.


31

Kısacası, hakkında veri aktarmak için bir betik gösterimidir. Bazı yönlerden XML'e alternatif olarak temel veri türlerini, dizileri ve ilişkilendirilebilir dizileri (ad-değer çiftleri, Nesneler olarak adlandırılır, çünkü temsil ettikleri şey budur).

Sözdizimi JavaScript'te kullanılır ve JSON'un kendisi "JavaScript Nesne Gösterimi" anlamına gelir. Ancak taşınabilir hale gelmiştir ve diğer dillerde de kullanılmaktadır.

Ayrıntı için yararlı bir bağlantı burada:

http://secretgeek.net/json_3mins.asp


19

JSON biçimi genellikle yapılandırılmış verilerin bir ağ bağlantısı üzerinden serileştirilmesi ve iletilmesi için kullanılır. Öncelikle XML'e alternatif olarak hizmet veren bir sunucu ve web uygulaması arasında veri iletmek için kullanılır.


16

JSON, JavaScript Nesne Gösterimi'dir. XML ile karşılaştırıldığında ağ bağlantılarından veri setleri aktarmanın çok daha kompakt bir yoludur. Ben JSON XML aksi takdirde "önerilen" seçeneği olacak herhangi bir AJAX benzeri uygulamalarda kullanılmasını öneririz. XML'in ayrıntı düzeyi, indirme süresine ve artan bant genişliği tüketimine ($$$) katkıda bulunacaktır. Aynı etkiyi JSON ile de gerçekleştirebilirsiniz ve işaretlenmesi neredeyse sadece temel yapıya değil, verinin kendisine adanmıştır.


11

ortak kısa cevap: veri istekleri yapmak için AJAX kullanıyorsanız, nesneleri kolayca JSON dizeleri olarak gönderebilir ve döndürebilirsiniz. Javascript desteği için kullanılabilir uzantılar toJSON (), AJAX isteğinde sunucuya veri göndermek için tüm javascript türlerini çağırır. AJAX yanıtları, basit bir değerlendirme çağrısı ile Javascript nesnelerine dönüştürülebilen JSON dizeleri olarak nesneleri döndürebilir, örneğin AJAX işlevi someAjaxFunctionCallReturningJson dönerse

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

Javascript ile yazabilirsin

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

JSON, web hizmeti yükleri ve diğerleri için de kullanılabilir, ancak AJAX sonuçları için gerçekten uygundur.

  • Güncelleme (on yıl sonra): Bunu yapma, JSON.parse kullanma

1
Eval () ile her şey değerlendirilir. bu bir güvenlik riski.
Thomas Weller

@ThomasWeller evet bu cevap eski, JSON ile giderdim. Şimdi teşekkürler!
Steven A. Lowe

8

JSON'u çok seviyorum çünkü çok kısa . Sıkıştırılabilen web içeriği için bu mutlaka önemli değildir (bu nedenle x html'nin neden bu kadar popüler olduğu). Ancak bunun faydalı olabileceği durumlar vardır.

Örneğin, bir proje için XMPP yoluyla serileştirilmesi ve iletilmesi gereken bilgileri aktarıyordum . Çoğu sunucu tek bir mesajda iletebileceğiniz veri miktarını sınırlayacağından, JSON'u bariz alternatif XML üzerinde kullanmanın yararlı olduğunu gördüm.

Ek bir bonus olarak, Python veya Javascript'i biliyorsanız, JSON'u zaten biliyorsunuz ve çok fazla eğitim almadan yorumlayabilirsiniz.


8

JSON nedir?

JavaScript Nesne Gösterimi (JSON), JavaScript'in nesne değişmezlerinden esinlenen hafif bir veri değişim biçimidir.

JSON değerleri şunlardan oluşabilir:

nesneler (ad-değer çiftlerinin koleksiyonları) diziler (sıralı değer listeleri) dizeler (çift tırnak işaretleri halinde) sayılar true, false veya null

JSON dilden bağımsızdır.

PHP ile JSON?

PHP Sürüm 5.2.0'dan sonra, JSON uzantısı varsayılan olarak kodu çözer ve işlevleri kodlar.

Json_encode - değerlerin JSON temsilini döndürür Json_decode - JSON Dizesinin kodunu çözer Json_last_error - En son oluşan hatayı döndürür.

JSON Sözdizimi ve Kuralları?

JSON sözdizimi, JavaScript nesne gösterim sözdiziminden türetilir:

Veriler ad / değer çiftlerinde Veri virgülle ayrılır Kıvırcık parantez tutma nesneleri Kare parantez tutma dizileri


4

Üniversitede bir proje yapmak zorundayız ve çok büyük bir sorunla karşı karşıya kaldık, buna Aynı Köken Politikası deniyor. Diğer şeylerin yanı sıra, Javascript'ten XMLHttpRequest yönteminizin, sitenizin bulunduğu alan adı dışındaki alan adlarına istekte bulunamamasını sağlar.

Örneğin, siteniz www.example.com üzerindeyse www.otherexample.com adresine istekte bulunamazsınız. JSONRequest buna izin verir, ancak bu site izin veriyorsa JSON biçiminde sonuç alırsınız (örneğin, JSON'da ileti döndüren bir web hizmeti vardır). Bu belki JSON kullanabileceğiniz bir problemdir.

İşte pratik bir şey: Yahoo JSON


4

JSON ve geleneksel sözdizimi arasındaki fark aşağıdaki gibi olacaktır (Javascript'te)

Konvansiyonel

 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","mike.Anderson@office.com");

JSON ile

JSON kullanırsak farklı şekilde tanımlayabiliriz.

  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':'mike.adnersone@office.com'});

Hatırlamamız gereken en önemli şey, "Çalışan" sınıfını veya JSON yöntemi olmadan 100 öğeyle modal oluşturmak zorunda kalırsak, sınıf oluştururken her şeyi ayrıştırmamız gerektiğidir. Ancak JSON ile nesneleri yalnızca sınıf için yeni bir nesne tanımlandığında satır içinde tanımlayabiliriz.

aşağıdaki bu satır JSON ile bir şeyler yapmanın yoludur (şeyleri tanımlamanın basit bir yolu)

 var Emp = new Employee({'name':'Mike', 'Id':'123', 'Phone':'23792747', 'email':'mike.adnersone@office.com'});

2
Bu tam olarak JSON değil - bir Javascript Nesnesi (JSON değil)
Ben Aubin

4

Bazen, hiçbir şeyin gerekli olmadığı yerlerde teknik özellik verilir ve en çok oy alan cevapların çoğu doğru teknik ve spesifik olsa da, kişisel olarak Wikipedia'da veya içinde bulunabilecekleri gibi anlaşılması daha kolay veya özlü olduklarını düşünmüyorum. resmi belgeler.

JSON'u düşünmeyi sevdiğim şey tam olarak ne olduğudur - farklı diller dünyasında bir dil. Bununla birlikte, JSON ve diğer diller arasındaki fark "herkes" "in" anadilleri "ile birlikte JSON'u konuşmasıdır.

Gerçek bir dünya örneği kullanarak, üç kişimiz olduğunu varsayalım. Bir kişi Igbo'yu ana dili olarak konuşuyor. İkinci kişi ilk kişiyle etkileşim kurmak ister, ancak ilk kişi Yoruba'yı ilk dilleri olarak konuşur.

Ne yapabiliriz?

Neyse ki, örneğimizdeki üçüncü kişi İngilizce konuşarak büyüdü, ancak her ikisini de konuşuyor Igbo Yoruba'yı ikinci dil olarak ve bu nedenle ilk iki kişi arasında bir aracı olarak hareket edebiliyor.

Programlama dünyasında, ilk "kişi" Python, ikinci "kişi" Ruby ve üçüncü "kişi", Ruby'yi Python'a "çevirebilmesi" için JSON'dur. Şimdi açıkçası bu benzetme mükemmel değildir, ancak, iki dilli olan biri olarak, JSON'un diğer programlama dilleriyle nasıl etkileşime girdiğine bakmanın kolay bir yolu olduğuna inanıyorum.


2

Çok basit. JSON, Java Script Nesne Gösterimi anlamına gelir. Bunu, yazılım bileşenleri arasında veri aktarımı için XML kullanmaya alternatif olarak düşünün.

Örneğin, yakın zamanda JSON döndüren bir grup web hizmeti yazdım ve bazı Javascript geliştiricileri daha sonra hizmetleri çağıran ve bu biçimde döndürülen bilgileri tüketen kod yazdılar.


2

JSON (Javascript nesne gösterimi) veri değişimi / aktarımı için hafif bir veri biçimidir. JavaScript olduğu gibi anahtar / değer çiftindedir. REST API için sunucudan istemciye veri aktarımı için yaygın olarak kullanılır. Günümüzde birçok sosyal medya sitesi bunu kullanıyor. Veri türleri açısından bunu XML kadar sağlam görmeme rağmen. XML çok zengin veri tiplerine ve XSD'ye sahiptir. JSON bu konuda biraz eksik.

Aynı miktarda dize verisi için JSON, XML'de tüm açılış ve kapanış etiketlerine vb.Gibi XML ile karşılaştırıldığında daha açık olacaktır.


0

Java bağlamında, JSON'un kullanılmasını istemenin bir nedeni, Java'nın (tarihsel olarak) oldukça ciddi güvenlik açıklarına maruz kaldığı gösterilen Serileştirme çerçevesine çok iyi bir alternatif sağlamasıdır.

Joshua Bloch bunu 85. Maddenin "Java Serileştirmesine Alternatifleri Tercih Etme" (Etkili Java 3. Baskı)

Java'nın Serileştirmesi başlangıçta veri yapılarını kolayca iletilebilecek veya depolanabilecek bir biçime dönüştürmekti. JSON, yukarıda belirtilen ciddi istismarlar olmaksızın bu gereksinimi karşılar.


-3

Php json yanıtınızı ayrıştırmak için aşağıdaki kodu deneyin: 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"}]';
?>

Bu kod soruyu cevaplayabilirken, sorunun nasıl ve / veya neden çözüldüğüne dair ek bağlam sağlamak yanıtlayıcının uzun vadeli değerini artıracaktır.
Nic3500
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.