• json açıklaması JavaScript - JSON ve onunla çalışma yöntemleri. Basit bir JSON verisi örneği

    JSON, veri yazmak için bir metin biçimidir. Hem tek bir sayıyı hem de bir dizeyi metin biçiminde ve veri içeren diziler gibi karmaşık yapıları sunmanıza olanak tanır. Bu kayıt formatını kullanmak uygundur çünkü okunabilir ve sezgiseldir, aynı zamanda çok karmaşık veri yapılarını kaydetmenize olanak tanır. Ayrıca, xml'den daha kompakttır, bu yüzden bence web tarayıcısı ve sunucu arasındaki veri alışverişi için daha çok tercih edilir.

    Örneklerle JSON Söz Dizimi

    Json formatı genellikle 2 versiyonda yazılır:

    1. Değer dizisi. Örneğin, JSON biçimindeki 10, 15 dizisi ve "test" şöyle görünür:

    2. Anahtar:değer çiftleri biçiminde kayıt. Örneğin:

    ("Ad": "Ivanov Sergey", "Doğum tarihi": "03/09/1975")

    Biraz daha karmaşık bir örnek:

    ("İsim" : "İvanov Sergey", "Adres" : ("Şehir" : "Moskova", "Sokak" : "Pyatnitskaya", "Ev" : "35" )) )

    JSON formatı ile çalışmak için PHP fonksiyonları

    5.2 sürümünden beri php dilinde. sadece 4 işlev vardır:

    • json_decode - Bir JSON dizesinin kodunu çözer (bir json biçim dizesinden veri alır)
    • json_encode - Verilerin bir JSON gösterimini döndürür (verileri bir json dizisine dönüştürür)
    • json_last_error_msg - json_encode() veya json_decode()'a yapılan son çağrının hata mesajını içeren bir dizi döndürür
    • json_last_error - Son hatayı döndürür

    Temel olarak, çoğunlukla yalnızca iki işlev kullanılır: json_encode ve json_decode . Söz dizimlerinin ayrıntılarına girmeyeceğim, daha fazla ayrıntı için php.net'e bakabilirsiniz. Kullanım örneği:

    $arr1 = dizi(0,1,2); $json_str = json_encode($arr1); yankı $json_str; // çıktı json dizisi: $arr2 = json_decode($json_str); yankı $arr2; // çıktı: 1

    Lütfen dikkat: Verileri Rusça'da JSON biçiminde kodlarken, json_encode işlevi Rusça karakterleri Unicode'a dönüştürür, örn. onları \uXXXX ile değiştirir ve böylece json dizesi insanlar için okunamaz hale gelir (ancak tarayıcı için anlaşılır). Unicode'a dönüştürmek istemiyorsanız (örneğin, kodda hata ayıklarken), JSON_UNESCAPED_UNICODE seçeneğini kullanabilirsiniz.

    Ayrıca, kodlama sırasında kaçış için bölü işaretleri eklemekten kaçınmak ve sayı içeren dizeleri sayı olarak kodlamak için JSON_UNESCAPED_SLASHES ve JSON_NUMERIC_CHECK kullanabilirsiniz. Sonuç olarak, json dizesinin insanlar tarafından okunabilir olması için örneğin şunu yapacağız:

    $arr = array("fio" => "Ivanov Sergey", "yaş" => "32", "vk_url" => "https://vk.com/id11111"); echo json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

    Bu seçenekler olmadan, satır şöyle olurdu:

    ( "fio" : "\u0418\u0432\u0430\u043d\u043e\u0432 \u0421\u0435\u0440\u0433\u0435\u0439", "yaş" : "32", "vk_url":"https:\/\ /vk.com\/id11111" )

    ve seçenekleri kullanarak okunabilir bir dize elde ederiz:

    ("fio" : "Ivanov Sergey", "yaş" : 32, "vk_url" : "https://vk.com/id11111" )

    Bir şey daha: json_decode işlevinin bir json dizesinin kodunu çözerken tam olarak bir dizi döndürmesini istiyorsanız, işleve true değerine eşit olan ikinci parametreyi eklemeniz yeterlidir.

    $json_str = "( "a":1, "b":2, "c":3 )"; $nesne = json_decode($json_str); // nesneyi al echo $obj->a; // çıktılar 1 $arr = json_decode($json_str, true); // bir ilişkisel dizi elde et echo $arr["a"]; // 1 yazdırır

    Bu, php fonksiyonlarının gözden geçirilmesini sonlandırır.

    JSON biçimiyle çalışmak için JavaScript işlevleri

    JSON formatının başlangıçta JavaScript dili için icat edildiği ve daha sonra farklı dillerde kullanılan ayrı bir metin formatı haline geldiği gerçeğiyle başlayalım. Görünüşe göre, bu nedenle, JSON sözdizimi, sıradan nesneleri ve dizileri yazmak için kullanılan sözdizimine çok benzer.

    // JavaScript dizisi örneği arr = ; uyarı(arr); // 1 görüntüler // JavaScript'te bir nesne örneği obj = ("ad": "Vasya", "yaş": 35, "isAdmin": false ) alert(obj.name); // "Vasya"yı gösterir

    JSON biçimine ve biçiminden dönüştürmek için kullanılan JavaScript işlevleri:

    • JSON.parse - bir JSON dizesinin kodunu çözme (bir dizeyi nesnelere ve/veya dizilere dönüştürme)
    • JSON.stringify - verilerin bir JSON temsilini döndürür (nesneleri ve/veya dizileri bir json dizesine dönüştürür)

    Bir json dizesini sayılarla bir diziye çözmenin basit bir örneği:

    Dizi = ""; dizi = json ayrıştırma(str); uyarı(arr); // 1 yazdırır

    Bir nesneyi JSON dizesine dönüştürmeye (serileştirmeye) bir örnek:

    Obj = ("ad": "Vasya", "yaş": 35, "isAdmin": false ) alert(JSON.stringify(obj)); // ("ad":"Vasya","yaş":35,"isAdmin":false) görüntüler

    Bir nesneyi bir JSON dizesine serileştirirken (dönüştürürken), varsa, nesnenin toJSON yöntemi çağrılır. Yöntem yoksa, nesnenin tüm özellikleri listelenir. Bir nesneyi toJSON yöntemiyle dönüştürmeye bir örnek:

    Obj = ( "ad": "Vasya", "yaş": 35, "isAdmin": false, toJSON: function() ( return this.age; ) ) alert(JSON.stringify(obj)); // 35 yazdırır

    JSON formatının pratik kullanım örnekleri

    Aslında kişisel olarak JSON formatını 2 ana durumda kullanıyorum:

    1. Ajax isteklerini kullanarak tarayıcı ve sunucu arasında veri aktarımı.

    Örneğin, sayfayı yeniden yüklemeden verileri güncellememiz gereken bir sayfamız var. Diyelim ki sunucudan "yüklenecek" bir çalışan listesi ve verileri içeren bilgilere ihtiyacınız var.

    JavaScript'te, jQuery kullanarak bunu basitleştirir ve verileri tarayıcıda bir tablo biçiminde görüntüleriz:

    $.getJSON("get-info.php").success(function(data) ( // ajax isteği, sunucudan gelen veriler htmlstr = " veri değişkenine yazılacak)

    "; for (var i=0; i "İvanov Sergey", "doğum günü" => "03/09/1975"); $user_info = dizi ("fio" => "Aleksey Petrov", "doğum günü" => " 18.09.1983"); echo json_encode($user_info); çıkış;

    Bu örnekte, sunucudan tarayıcıya iletilen JSON dizesi şuydu:

    [("fio":"Ivanov Sergey","doğum günü":"03/09/1975"),("fio":"Petrov Aleksey","doğum günü":"18/09/1983")]

    Çizgiyi kasıtlı olarak "ağaç" şeklinde göstermedim, çünkü bu formda iletilir. Ve takdir edebileceğiniz gibi, JSON verilerini yazmak çok kompakttır, bu da bu verilerin sunucudan tarayıcıya aktarımının neredeyse anında olacağı anlamına gelir.

    2. Karmaşık veri yapılarının veritabanına yazılması.

    Bazen, farklı verileri depolamak için veritabanında başka bir tablo başlatmanın tavsiye edilmediği durumlar olabilir. Diyelim ki siteye üye olan bir kullanıcının arka plan rengi ve yazı rengi ayarlarını yapma imkanı var diyelim.

    2 ayar uğruna başka bir tablo başlatmak yerine, kullanıcı ayarları verilerinin yerleştirileceği kullanıcıların listesini içeren tabloda bir metin sütunu oluşturabilirsiniz. Ardından, örneğin ayarları güncelleme isteği şu şekilde olabilir:

    GÜNCELLEME kullanıcıları SET settings = "("background-color":"#FFFFFF", "text-color":"#000000")" NEREDE user_id = 10

    Gelecekte, kullanıcılar tablosundan bilgi aldıktan sonra, php betiği onları kolayca ayarlarla bir diziye dönüştürebilir. Örneğin, $user_info değişkeni users tablosundan bir kullanıcı için alınan verileri içeriyorsa, ayarlarla bir dizi elde etmek çok basittir:

    $settings = json_decode($user_info["ayarlar"], doğru); echo "Arka plan rengi = ".$settings["arka plan rengi"]; echo "Metin rengi = ".$settings["metin rengi"];

    JSON formatında, örneğin, alıcının hangi ürün seçeneklerini seçtiğini de veritabanına yazabilirsiniz.

    ("15":["45","47"], "18":"52") // 15. seçenek 45 ve 47 olarak ayarlandı ve 18. seçenek 52 olarak ayarlandı

    Prensip olarak, sepetin tüm içeriğini JSON formatında bile yazabilirsiniz, örneğin şu şekilde:

    ( "user_id" : 10, "session_id" : "2c2l3h4ii271aojentejtdcmh3", "products": [ ( "product_id" : 15, "seçenekler" : ("15" : , "18" : 52 ), "miktar" : 1, "price" : 1500 ), ("product_id" : 16, "seçenekler" : ("15" : , "18" : 51 ), "miktar" : 2, "price" : 1000 ) ] )

    Ağaç olmayan normal bir görünümde, bu JSON dizesi şöyle görünür:

    ("user_id":10,"session_id":"2c2l3h4ii271aojentejtdcmh3","products":[("product_id":15,"options":("15":,"18":52),"miktar":1, "price":1500),("product_id":16,"seçenekler":("15":,"18":51),"miktar":2,"fiyat":1000)])

    Böylece örneklerden de görebileceğiniz gibi hemen hemen her bilgi JSON formatında saklanıp iletilebilir.

    JSON'u daha önce duymuş olmalısınız. Nedir? Ne yapabilir ve nasıl kullanılabilir?

    Bu derste, JSON'un temellerini ele alacağız ve aşağıdaki noktaları ele alacağız:

    • JSON nedir?
    • JSON ne için kullanılır?
    • Bir JSON dizisi nasıl oluşturulur?
    • Basit bir JSON dizesi örneği.
    • JSON ve XML'i karşılaştıralım.
    • JavaScript ve PHP'de JSON ile nasıl çalışılır?
    JSON nedir?

    JSON, yapılandırılmış verileri depolamanın ve iletmenin basit, metin tabanlı bir yoludur. Basit bir sözdizimi ile, tek bir sayıdan dizelere, dizilere ve nesnelere kadar her şeyi düz metin olarak kolayca saklayabilirsiniz. Karmaşık veri yapıları oluşturmak için dizileri ve nesneleri de birbirine bağlayabilirsiniz.

    Bir JSON dizesi oluşturulduktan sonra, düz metin olduğundan onu başka bir uygulamaya veya ağdaki başka bir konuma göndermek kolaydır.

    JSON aşağıdaki avantajlara sahiptir:

    • Kompakt.
    • Cümlelerinin hem insan hem de bilgisayar tarafından okunması ve oluşturulması kolaydır.
    • Çoğu programlama dili için (sayılar, diziler, boolean'lar, diziler vb.)
    • Birçok programlama dili, JSON yapılarını okumak ve oluşturmak için işlevlere ve kitaplıklara sahiptir.

    JSON adı, JavaScript Object Notation (JavaScript nesnelerinin temsili) anlamına gelir. Adından da anlaşılacağı gibi, nesnelerin tanımlanma biçimine (diğer dillerde ilişkisel diziler oluşturmaya çok benzer) ve dizilere dayanır.

    JSON ne için kullanılır?

    JSON'un en yaygın kullanımı, sunucudan tarayıcıya veri göndermektir. Tipik olarak, JSON verileri, tarayıcının ve sunucunun sayfayı yeniden yüklemek zorunda kalmadan veri alışverişinde bulunmasına izin veren AJAX kullanılarak teslim edilir.

  • Kullanıcı, bir çevrimiçi mağazada bir ürün küçük resmine tıklar.
  • Tarayıcıda çalışan JavaScript, sunucuda çalışan PHP betiğine, seçilen ürünün kimliğini ileten bir AJAX isteğinde bulunur.
  • PHP betiği, ürün adını, açıklamasını, fiyatını ve diğer bilgileri veritabanından alır. Daha sonra verilerden bir JSON dizesi oluşturur ve bunu tarayıcıya gönderir.
  • Tarayıcıda çalışan JavaScript, JSON dizesini alır, kodunu çözer ve kullanıcı için sayfada ürün bilgilerini görüntüler.
  • JSON dizesini GET veya POST isteklerinde parametre olarak ileterek tarayıcıdan sunucuya veri göndermek için JSON'u da kullanabilirsiniz. Ancak, AJAX istekleri yoluyla veri aktarımı basitleştirilebileceğinden, bu yöntem daha az yaygındır. Örneğin, ürün kimliği, GET isteğinin bir parçası olarak URL'ye dahil edilebilir.

    jQuery kitaplığı, getJSON() ve parseJSON() gibi AJAX istekleri aracılığıyla JSON kullanarak veri almayı kolaylaştıran çeşitli yöntemlere sahiptir.

    Bir JSON dizisi nasıl oluşturulur?

    Bir JSON dizisi oluşturmak için birkaç temel kural vardır:

    • JSON dizesi, bir değerler dizisi veya bir nesne (ad/değer çiftlerinin ilişkisel bir dizisi) içerir.
    • sıralamak köşeli parantezler ([ ve ]) içine alınır ve virgülle ayrılmış bir değerler listesi içerir.
    • Bir obje kaşlı ayraçlar (( ve )) içine alınır ve ad/değer çiftlerinin virgülle ayrılmış bir listesini içerir.
    • ad/değer çiftiçift ​​tırnak içine alınmış alan adından, ardından iki nokta üst üste (:) ve alan değerinden oluşur.
    • Anlam bir dizide veya nesnede şunlar olabilir:
      • Sayı (tamsayı veya kayan nokta)
      • Dize (çift tırnak içinde)
      • Boole değeri (doğru veya yanlış)
      • Başka bir dizi (köşeli parantez içinde)
      • Başka bir nesne (kıvrık parantez içinde)
      • Boş değer

    Bir dizeye çift tırnak eklemek için ters eğik çizgi kullanmanız gerekir: \". Pek çok programlama dilinde olduğu gibi, bir dizgede kontrol karakterlerini ve onaltılık kodları önüne ters eğik çizgi koyarak koyabilirsiniz. Ayrıntılar için JSON sitesine bakın.

    Basit JSON Dize Örneği

    Aşağıda, JSON biçiminde bir kullanıma alma örneği verilmiştir:

    ("orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [e-posta korumalı]", "contents": [ ("productID": 34, "productName": "Süper ürün", "miktar": 1 ), ( "productID": 56, "productName": "Mucize ürün", "miktar": 3 ) ], "sipariş Tamamlandı": true )

    Çizgiyi ayrıntılı olarak inceleyelim:

    • Küme parantezleri (( ve )) kullanarak bir nesne oluşturuyoruz.
    • Nesnede birkaç ad/değer çifti vardır: "orderID": 12345 "orderId" adlı ve tamsayı değerine sahip özellik 12345 "shopperName": "shopperName" adlı ve "Vanya Ivanov" "shopperEmail" adlı dize değerine sahip "Vanya Ivanov" özelliği : " [e-posta korumalı]" Dize değerine sahip "shopperEmail" adlı özellik " [e-posta korumalı]" "contents": [ ... ] Değeri bir dizi olan "contents" adlı özellik "orderCompleted": true Boole değeri true olan "orderCompleted" adlı özellik
    • Siparişteki satır öğelerini temsil eden "içerikler" dizisinde 2 nesne vardır. Her nesne 3 özellik içerir: productID , productName ve miktar .

    Bu arada, JSON, JavaScript nesnelerini bildirmeye dayalı olduğundan, yukarıdaki JSON dizesini hızlı ve kolay bir şekilde bir JavaScript nesnesi yapabilirsiniz:

    var cart = ("orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [e-posta korumalı]", "contents": [ ("productID": 34, "productName": "Süper ürün", "miktar": 1 ), ( "productID": 56, "productName": "Mucize ürün", "miktar": 3 )], "sipariş Tamamlandı": true );

    JSON ve XML'i Karşılaştırma

    JSON'u birçok yönden, en azından web uygulamaları alanında, XML'e bir alternatif olarak düşünebilirsiniz. AJAX kavramı başlangıçta bir sunucu ile bir tarayıcı arasında veri aktarmak için XML kullanımına dayanıyordu. Ancak son yıllarda JSON, AJAX veri aktarımı için giderek daha popüler hale geldi.

    XML, çok sayıda uygulamada kullanılan kanıtlanmış bir teknoloji olsa da, JSON daha kompakt ve tanınması daha kolay bir veri formatı olma avantajına sahiptir.

    Yukarıdaki XML nesne örneğinin nasıl görüneceği aşağıda açıklanmıştır:

    orderID 12345 shopperName Vanya Ivanov shopperEmail [e-posta korumalı] içindekiler productID 34 productName Super Ürün miktarı 1 productID 56 productName Super Ürün miktarı 3 orderCompleted true

    XML sürümü önemli ölçüde daha büyüktür. Aslında 1128 karakter uzunluğunda, JSON varyantı ise sadece 323 karakter uzunluğunda. XML sürümünün anlaşılması da zordur.

    Elbette bu radikal bir örnek. Ve daha kompakt bir XML girişi oluşturmak mümkündür. Ancak, JSON eşdeğerinden önemli ölçüde daha uzun olacaktır.

    JavaScript'te JSON dizesiyle çalışma

    JSON'un basit bir biçimi vardır, ancak manuel olarak bir JSON dizisi oluşturmak oldukça sıkıcıdır. Ek olarak, genellikle bir JSON dizesi almanız, içeriğini kodda kullanılabilecek bir değişkene dönüştürmeniz gerekir.

    Çoğu programlama dilinde, değişkenleri kolayca JSON dizelerine dönüştürmek için araçlar bulunur ve bunun tersi de geçerlidir.

    Bir değişkenden bir JSON dizesi oluşturun

    JavaScript, bir değişkeni alan ve içeriğini temsil eden bir JSON dizesi döndüren yerleşik bir JSON.stringify() yöntemine sahiptir. Örneğin, örneğimizdeki sipariş ayrıntılarını içeren bir JavaScript nesnesi oluşturalım ve ardından ondan bir JSON dizesi oluşturalım:

    var cart = ("orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [e-posta korumalı]", "contents": [ ("productID": 34, "productName": "Süper ürün", "miktar": 1 ), ( "productID": 56, "productName": "Mucize ürün", "miktar": 3 )], "orderCompleted": true ); alert(JSON.stringify(cart));

    Bu kod şunları verecektir:

    JSON.stringify() yönteminin boşluksuz bir JSON dizesi döndürdüğünü unutmayın. Okuması daha zordur, ancak bir ağ üzerinden iletim için daha derli topludur.

    Bir JSON dizesini JavaScript'te ayrıştırmanın birkaç yolu vardır, ancak en güvenli ve güvenilir olanı yerleşik JSON.parse() yöntemini kullanmaktır. Bir JSON dizesi alır ve verileri içeren bir JavaScript nesnesi veya dizisi döndürür. Örneğin:

    var jsonString = " \ ( \ "orderID": 12345, \ "shopperName": "Vanya Ivanov", \ "shopperEmail": " [e-posta korumalı], \ "contents": [ \ ( \ "productID": 34, \ "productName": "Süper Ürün", \ "miktar": 1 \ ), \ ( \ "productID": 56, \ "productName": "Harika Ürün", \ "miktar": 3 \ ) \ ], \ "sipariş Tamamlandı": true \ ) \ "; var cart = JSON.parse(jsonString); uyarı(cart.shopperEmail); alert(cart.contents.productName);

    Sipariş örneğimizin JSON dizesini içeren bir jsonString değişkeni oluşturduk. Daha sonra bu dizeyi, JSON verilerini içeren bir nesne oluşturan ve onu cart değişkeninde depolayan JSON.parse() yöntemine iletiyoruz. Geriye kalan tek şey, shopperEmail nesnesinin özelliklerini ve içindekiler dizisinin ürünAdı'nı yazdırarak test etmektir.

    Sonuç olarak, aşağıdaki çıktıyı alacağız:

    Gerçek bir uygulamada JavaScript kodunuz, siparişi sunucu komut dosyasından bir AJAX yanıtında bir JSON dizesi olarak alır, dizeyi JSON.parse() yöntemine iletir ve ardından verileri kullanıcının sayfasında görüntülemek için kullanır.

    JSON.stringify() ve JSON.parse(), belirli verileri özel olarak dönüştürmek için geri arama işlevlerini kullanmak gibi başka yeteneklere sahiptir. Bu seçenekler, çeşitli verileri geçerli JavaScript nesnelerine dönüştürmek için çok kullanışlıdır.

    PHP'de JSON dizesiyle çalışmak

    PHP, JavaScript gibi, JSON dizeleriyle çalışmak için yerleşik işlevlere sahiptir.

    Bir PHP değişkeninden bir JSON dizesi oluşturun

    json_encode() işlevi bir PHP değişkeni alır ve değişkenin içeriğini temsil eden bir JSON dizesi döndürür. İşte PHP ile yazılmış sipariş örneğimiz:

    Bu kod, JavaScript örneğindekiyle tam olarak aynı JSON dizesini döndürür:

    ("orderID":12345,"shopperName":"Vanya Ivanov","shopperEmail":" [e-posta korumalı]","contents":[("productID":34,"productName":"Süper Ürün","miktar":1),("productID":56,"productName":"Wonder Product","miktar": 3)],"sipariş Tamamlandı": doğru)

    Gerçek bir uygulamada, PHP betiğiniz bu JSON dizesini tarayıcıya bir AJAX yanıtının parçası olarak gönderir; burada JSON.parse() yöntemini kullanan JavaScript kodu, onu kullanıcının sayfasında görüntülenecek bir değişkene geri ayrıştırır. .

    json_encode() işlevine ikinci argüman olarak çeşitli işaretler iletebilirsiniz. Onların yardımıyla, değişkenlerin içeriğini bir JSON dizisine kodlama ilkelerini değiştirebilirsiniz.

    JSON dizesinden bir değişken oluşturun

    json_decode() yöntemi, bir JSON dizesini bir PHP değişkenine dönüştürmek için kullanılır. JavaScript örneğimizi PHP koduyla JSON.parse() yöntemiyle değiştirelim:

    JavaScript'e gelince, bu kod şunları üretecektir:

    [e-posta korumalı] mucize mallar

    Varsayılan olarak json_decode() işlevi, JSON nesnelerini PHP nesneleri olarak döndürür. stdClass sınıfının jenerik PHP nesneleri vardır. Bu nedenle, yukarıdaki örnekte nesnenin özelliklerine erişmek için -> kullanıyoruz.

    İlişkili bir PHP dizisi biçiminde bir JSON nesnesine ihtiyacınız varsa, json_decode() işlevine ikinci argüman olarak true iletmelisiniz. Örneğin:

    $cart = json_decode($jsonString, true); yankı $cart["shopperEmail"] . "
    "; echo $sepet["içerik"]["ürünAdı"] . "
    ";

    Bu kod aynı çıktıyı üretecektir:

    [e-posta korumalı] mucize mallar

    Özyinelemenin derinliğini ve büyük tamsayıların nasıl ele alınacağını belirtmek için json_decode() işlevine başka bağımsız değişkenler de iletebilirsiniz.

    Çözüm

    JSON'u anlamak ve kullanmak kolay olmakla birlikte, özellikle AJAX kullanırken, uygulamalar ve bilgisayarlar arasında veri aktarımı için çok kullanışlı ve esnek bir araçtır. Bir AJAX uygulaması geliştirmeyi planlıyorsanız, JSON'un atölyenizdeki en önemli araç olacağına şüphe yok.

    JSON (JavaScript Object Notation), hem insanlar hem de bilgisayarlar tarafından okunması ve yazılması kolay olan basit bir veri değişim biçimidir. ECMA-262 3. Baskı - Aralık 1999 standardında tanımlandığı gibi, JavaScript programlama dilinin bir alt kümesini temel alır. JSON, uygulama dilinden tamamen bağımsız olan ancak C, C++, C#, Java, JavaScript, Perl, Python ve diğerleri gibi C benzeri dillerin programcılarının aşina olduğu kuralları kullanan bir metin biçimidir. Bu özellikler, JSON'u ideal bir veri alışverişi dili yapar.

    JSON iki veri yapısını temel alır:

    • Anahtar/değer çiftlerinin toplanması. Farklı dillerde bu kavram şu şekilde uygulanmaktadır: bir obje, kayıt, yapı, sözlük, karma, adlandırılmış liste veya ilişkisel dizi.
    • Sıralı bir değerler listesi. Çoğu dilde bu şu şekilde uygulanır: sıralamak, vektör, liste veya sıra.

    Bunlar genel veri yapılarıdır. Hemen hemen tüm modern programlama dilleri bunları bir şekilde destekler. Programlama dilinden bağımsız olarak veri formatının bu yapılara dayanması gerektiğini varsaymak mantıklıdır.

    JSON gösteriminde şöyle görünür:

    Bir obje sıralanmamış bir anahtar/değer çiftleri kümesidir. Bir nesne ( açılış kaşlı parantez ile başlar ve a ) kapanış kaşlı parantez ile biter. Her adı şu takip eder: iki nokta üst üste, anahtar/değer çiftleri ayrılır, bir virgül.

    sıralamak- sıralı bir değerler koleksiyonu. Bir dizi [ açılış köşeli parantez ile başlar ve ] kapanış köşeli parantez ile biter. Değerler virgülle ayrılır.


    Anlam Belki sicimçift ​​tırnak içinde, sayı, doğru , yanlış , boş , nesne veya sıralamak. Bu yapılar iç içe olabilir.


    Astar kaçış karakteri olarak \ kullanan, çift tırnak içine alınmış sıfır veya daha fazla Unicode karakter koleksiyonudur. Bir karakter, tek bir karakter dizisi olarak temsil edilir. Benzer sözdizimi C ve Java'da kullanılır.


    Sayı yalnızca ondalık sayı sisteminin kullanılması dışında C veya Java ile aynı şekilde temsil edilir.


    Herhangi bir belirteç arasında boşluk kullanılabilir.

    Bazı kodlama detayları dışında, yukarıdakiler dili bütünüyle açıklamaktadır.


    Değişkenler, diziler ve nesneler, veri temsilinin tanıdık ve kullanışlı biçimleridir. Verileri, PHP sunucu dilinde gerekli olmayan JavaScript tarayıcı dilinde tanımlamak adettendir. JSON formatı, bunları tek bir bütün halinde genelleştirmenize ve programlama diline odaklanmanıza izin vermez. Bu durumda, veriler çiftlere dönüştürülür: "isim = değer". Her birindeki değer, bu tür çiftlerin bir koleksiyonu da olabilir.

    JSON'u kaşlı ayraçlarla ilişkilendirmek gelenekseldir ve JSON = Object Notation JavaScript formatı olduğundan ikincisi oldukça haklıdır. Son zamanlarda, özellikle dinamik yıllarda çok şey değişti. Belirli bir amaç için yaratılanlar, genellikle beklenmedik sonuçlar getirdi veya yeni ufuklar açtı.

    Veri alışverişi: tarayıcı - sunucu

    AJAX teknolojisi geleneksel hale geldi, olağan sayfa yenileme Baştan sona popüler olmaktan çıktı. Siteyi açan ziyaretçi, belirli sayfalar yalnızca ilgili yerde değiştiğinde, bir dizi kısmi veri alışverişi başlatır.

    JSON'un görünümünün AJAX kullanımıyla ilişkili olduğuna inanılıyor, ancak aslında, ilişkisel ve nesne gösterimi (nesneleri tanımlama ve kullanma sözdiziminin özellikleri), tarayıcı ile tarayıcı arasındaki veri alışverişinden çok JSON ile ilgilidir. sunucu.

    Modern sitelerin sayfalarının içeriği gerçekten "büyük" (hacimsel) hale geldiğinden, veri alışverişi için formatın etkinliği özel bir önem kazanmıştır. Bu, JSON'un verilerin yeni bir temsili haline geldiği anlamına gelmez, ancak uzun süredir bir JavaScript sözdizimi öğesi olduğu gerçeği önemlidir.

    Değişkenleri adlandırırken Kiril alfabesini kullanmak çok beklenmedik bir olgudur (saçmalık), ancak Chrome, Firefox ve hatta Internet Explorer 11'in en son sürümlerinde çalışır.

    Kiril ve JSON

    Tabii ki, Rus harfleriyle yazılan değişkenlerin değerlerinin ne kadar kolay krakozyabry'ye dönüştüğünü hatırlayarak, bu tamamen beklenmedik fenomeni kullanmamalısınız: isimler, özellikle dış olanlar hakkında ne söyleyebiliriz.

    Kiril adlarındaki girişimin, tarayıcının sürekli uğraşmak zorunda olduğu dış ortamı tarafından destekleneceği şüphelidir. Ancak bu gerçek, JSON biçiminin, geliştiricinin istediği herhangi bir şekilde adları ve değerleri yazabilme yeteneği olması nedeniyle dikkati hak ediyor. Bu önemlidir, çünkü her problemde kapsamın gerektirdiği şekilde tanımlanması hata ayıklamayı büyük ölçüde basitleştirir ve hata sayısını azaltır.

    Sözdizimsel yeniliğin neye dayandığı önemli değil - JSON, yasal bir hak ve gerçek bir eşleşme fırsatı vermesi önemlidir: "herhangi bir ad = herhangi bir değer".

    JavaScript diline saygı göstermeliyiz: sözdizimi tarafından sağlananlar, geliştiriciyi zorunlu kılmaz ve ona hiçbir şey empoze etmez. Geliştirici, veri modelinin optimum oluşumu ve kullanımları için algoritma için dilin sözdizimini özgürce kullanır.

    PHP ve JSON

    Verileri JSON formatında kabul eden sunucu (özellikle PHP aracılığıyla), onları olduğu gibi işleme ve sonucu benzer bir formatta tarayıcıya geri döndürme yeteneği sağlar. PHP Kaynak Dizisi:

    • $cJSON = dizi ("a"=> "alfa", "b"=> "beta", "g"=> "gama").

    Tarayıcıya geçmek için JSON formatına dönüştürülüyor:

    • $cJS = json_encode($cJSON).

    Sonuç:

    • ("a":"alfa","b":"beta","g":"gama").

    Fotoğrafta gösterilen iç içe yerleştirmeye izin verilir.

    Burada oluşturulan dizi, otomatik olarak "0" indeksi ile "kendi içine" ve ardından tekrar belirtilen "z" indeksi ile yeni bir elemanla eklenmiştir.

    Json_decode(), bir JSON dizesini bir PHP dizisine dönüştürür. Benzer sonuçlar, işlevler ve patlatma() ile de elde edilebilir. Bazı durumlarda, bu seçenek tercih edilir.

    yuvalama seviyesi

    Öğeler hem tarayıcı tarafında hem de sunucu tarafında iç içe yerleştirilebilir. Uygulamada, JSON biçimi (RFC 4627 tarafından açıklanan) 4'ten fazla iç içe yerleştirme düzeyi sağlar, ancak bu yetenek kötüye kullanılmamalıdır.

    Makul yeterliliğin ötesine asla geçmemek en iyisidir, bu, kodu okunabilir hale getirir ve diğer geliştiriciler için hata ayıklamayı ve anlamayı kolaylaştırır.

    JSON, genellikle XML'den daha basit, hem insanlar hem de bilgisayarlar tarafından anlaşılabilen veri yapıları olarak adlandırılır. Bu, veri miktarı az olduğunda ve geliştirici iç içe yerleştirme düzeyini doğru seçtiğinde geçerlidir. Diğer tüm durumlarda, parantez sayısını saymak ve hem tarayıcı tarafında hem de sunucu tarafında anlamak zordur.

    JSON dosyaları

    JSON'un pratikte kullanımı genellikle algının erişebileceği kısa bir dizi ile sınırlı değildir. Herhangi bir veri yapısı her zaman pragmatiktir. Aynı zamanda JSON, hem gerçek görev verilerinde (kurumsal personel) hem de geçici verilerin uygulanmasında (nesne önbelleği) etkin bir şekilde kullanılabilir.

    Enterprise State ve JSON Formatı: Bir Örnek

    Genellikle bir kişi hakkında bir kayıt, bir soyadı, ad, soyadı, doğum yılı, uzmanlık alanı, eğitim ... ve birkaç basit değerdir. Özellikle zorlu şirketlerde bile, bir kişiyle ilgili bir kayıt bir düzine veya iki alanı geçmeyecektir. Bu algısaldır ve bir veritabanı satırına yerleştirilebilir.

    Bir şirket birkaç kişiyi istihdam ediyorsa bu bir şeydir, ancak on binlerce kişiyi çalıştırıyorsa bu tamamen başka bir şeydir. Veritabanını kullanmaya devam edebilirsiniz, ancak onu bir dosya olarak saklamak daha pratik ve kullanımı daha kolay görünüyor.

    JSON bir düz metin dosyasıdır. Kadroyla ilgili durum, tamam. Her zaman okuyabilirsiniz. Aç ve düzenle, hizmet bilgilerini dosya içeriğine ekleme alışkanlığı olmayan herhangi bir metin düzenleyicide de mevcuttur. Genel olarak *.json, hem tarayıcının içindeki hem de dosyanın içindeki saf metindir - bir dize.

    Fotoğraf, bir örnek olarak, resmi oluşturan nesnenin önbelleğini göstermektedir.

    Bu, kupalar ve seramikler üzerine renkli 3B baskı sağlayan bir web sitesi tarafından oluşturulan bir dosyanın içeriğine bir örnektir. Doğal olarak, böyle bir JSON formatına sahip olmak, onu nasıl açacağınıza karar vermek gerçekten sorunlu. Ancak bu ve benzeri durumlarda dosyayı okumada bir sorun yok: PHP dosyayı okur, ayrıştırır ve tarayıcıya iletir. Ziyaretçi tarafından değiştirilen veriler sunucuya geri döndürülür ve geri yazılır.

    Bu kullanım durumunda dosya, kodun dışında depolanan bir değişken görevi görür. Gerekirse, değişken dosyadan bir değer alır ve site tarafından sağlanan iletişim kutusunda ziyaretçi tarafından değiştirilirse, tüm değişiklikler olduğu gibi kaydedilir. Dosyanın içeriğini okumaya ve kontrol etmeye gerek yoktur.

    JSON genellikle hizmet bilgilerini depolamak ve kullanmak için kullanılır - bu bir personel tablosu değildir, ne geliştiricinin ne de site ziyaretçisinin onu görmesi gerekmez.

    XML ve JSON

    "Her şeyin bir zamanı vardır" klasik bir bilgidir ve programlamanın ortaya çıkmasından önce bile bir aksiyom olarak kabul edilmiştir. "Hiçbir şey olduğu gibi görünmez" - bu aynı zamanda insanın ilk anlaşılır programı yapay bir dilde yazmasından önceydi.

    Veri formatları gerçek bir ihtiyaçtan doğar ve edinilen bilgiye dayanır. HTML'nin kendi yolu vardır, XML'in kendi yolu vardır ve JSON, diğer dillere genişletilmiş JavaScript nesne mantığıdır. Birini diğeriyle karşılaştırmak yapılacak en iyi şey değildir. Herkesinki kendine.

    XML, görevleriyle harika bir şekilde başa çıkıyor ve kesinlikle tarihe geçmeyecek. Ve JSON, 2006 yılına kadar kullanıldı, ancak her geliştirici, verilerini sunmak için belirli seçenekleri beyan etmeyi görevi olarak görmedi.

    Uygulamada, JSON'u bu şekilde kullanmayan, ancak ad = değer çiftlerini mükemmel bir şekilde depolayan ve bunları doğru zamanda doğru algoritmalar için kullanılabilir kılan BASIC'te programların yazıldığı durumlar olmuştur.

    Özel karakterler ("`", "~", "|", ...) ve veri formatları

    JavaScript'te ilişkisel diziler ve nesnelerle çalışma alışkanlığı, JSON kullanımını doğal ve kullanışlı hale getirir. Bu gerçekten harika bir format, ancak dizeleri ve dizileri manipüle ederek ayırma ve birleştirme yeteneğinin çok daha derin kökleri var.

    JavaScript'in birleştirme/bölme ve PHP'nin içe aktarma/patlatma işlevleri, hem XML hem de JSON veri biçimlerini ve kendi sürümünüzü rahat ve verimli bir şekilde kullanmanıza olanak tanır. İkincisi genellikle daha iyidir, ilk ikisi ise genel kullanım durumları için idealdir. Bilgi başka bir geliştiriciye, sunucuya, dosyaya veya veritabanına aktarılıyorsa, XML ve JSON'un bulunmaması daha iyidir. Herkes onlarla çalışır, bu nedenle bilgilerin iletilmesi / alınması yorum gerektirmez.

    Android'de JSON kullanma

    Android'de JSON formatında veri okumak ve yazmak sadece norm değildir, aynı zamanda bu belirli veri formatıyla çalışmaya yönelik birçok nesne vardır.

    JSON biçimini kullanır. Belki de bu doğrudur, ancak soru sosyal ağların olağanüstülüğünde değil, bilgilerin "ad = değer" biçiminde sunulmasının hem programlama hem de kullanım için gerçekten uygun olmasıdır. Katı ve kötü şöhretli "XML"den farklı olarak, bu gerçekten insan dostu bir formattır.

    ilişkisel diziler

    Öyle oldu ki değişkenler tanımlanmalı (JavaScript) veya en azından başlangıç ​​değerini (PHP) göstermelidir. Her iki durumda da değişken türünü kolayca değiştirebilir. Dil, gerekirse bu dönüşümü otomatik olarak gerçekleştirir.

    Ancak değişken neden adını değiştirip algoritmanın yürütülmesi sırasında görünüp, artık ihtiyaç kalmadığında ortadan kaybolmasın? İlişkili diziler bu sorunu çözer, ancak daha sonra bu tür nispeten dinamik değişkenler kullanıldığında, dizi adı ve ilişkili sözdizimi yapıları uygulandıkları yerde izlenecektir.

    Bu durum özellikle PHP'de telaffuz edilir, ancak değişken adındaki "$" sembolü ve nesne içindeki "$this->" kombinasyonu ile buna katlanabilirsiniz. JavaScript ve PHP'de aynı anda programlama, ilk başta gerçekten her şeyin nasıl farklı olduğunu merak edersiniz, ancak sonra her şey çok tanıdık ve doğal hale gelir...

    İlişkisel Dizi -> JSON

    Bu örnekte, PHPOffice/PHPWord kitaplığı kullanılarak bir *.docx belgesi oluşturulur ve aProperties dizisi belgenin özelliklerini (yazar, şirket, unvan, kategori, oluşturma tarihi...) içerir.

    İkinci dizi, sayfa verilerini içerir:

    • yönlendirme (yatay veya normal);
    • dikey ve yatay boyutlar;
    • dolgu (sol, üst, alt, sağ kenar boşlukları);
    • üstbilgiler ve altbilgiler.

    Belge, PHPOffice/PHPWord kitaplığının kurulu olduğu sunucuda oluşturulur. Site, JavaScript kullanarak bu dizilerin değerlerinin yönetilmesini sağlar. JSON formatındaki sonuç sunucuya geri döndürülür ve PHP algoritmalarında, yapılarında yani dizilerde kullanılır.

    Dinamik değişkenler

    JSON biçimi, dinamik değişken sorununu çözer. Burada, gereksiz söz dizim karmaşası olmadan değişkenleri oluşturabilir, değiştirebilir ve silebilirsiniz. Güzel görünüyor ve JavaScript'te kullanılıyor.

    Bu örnekte GetOjInfo() işlevi, nesneden değer adını ve değeri getirir. Başlangıçta, ojInfo değişkenine atanan JSON dize nesnesinin üç öğesi vardır: Ad, yaş ve iş. Biraz sonra Status değişkeni eklenir.

    İlk silme ifadesinden sonra, ojInfo satırı yaş öğesini, ikinci silme işleminden sonra ise çalışma öğesini kaybeder. Bu satırın belirli bir anlamı olan bir değişkenler koleksiyonu olduğunu varsayarsak, JSON kullanarak, JavaScript dilinin açıklamasının ve işlenmesinin işlemsel alanı (sözdizimi) dışındaki kümelerinden herhangi birini fiilen oluşturabilir, değiştirebilir ve silebilirsiniz.

    JSON formatı bu seçenek için tasarlanmamıştır, ancak bu mümkün, pratik ve kullanışlıdır.

    JSON sözdizimi, JavaScript sözdiziminin bir alt kümesidir.

    JSON sözdizimi kuralları

    JSON sözdizimi, JavaScript gösterim nesnesi sözdiziminden türetilmiştir:

    • Ad/değer çiftlerindeki veriler
    • Virgülle ayrılmış veriler
    • Kaşlı ayraçlar nesneleri tutar
    • Köşeli parantezler dizileri tutar
    JSON verileri - ad ve değer

    JSON verileri, ad/değer çiftleri olarak yazılır.

    Ad/değer çifti, alan adının (çift tırnak içinde) ardından iki nokta üst üste ve ardından değerden oluşur:

    örnek

    "ad":"John"

    JSON adları çift tırnak gerektirir. JavaScript adları değildir.

    JSON değerleri

    JSON değerleri şunlar olabilir:

    • Seri (tamsayı veya kayan nokta)
    • Dize (çift tırnak içinde)
    • Boole (doğru veya yanlış)
    • Dizi (köşeli parantez içinde)
    • Nesne (kıvrık parantez içinde)
    JSON nesneleri

    JSON nesneleri kaşlı ayraçlar içinde yazılır.

    Tıpkı JavaScript gibi, JSON nesneleri birden çok ad/değer çifti içerebilir:

    örnek

    ("ad":"John", "soyadı":"Doe")

    JSON dizileri

    JSON dizileri köşeli parantez içinde yazılır.

    Tıpkı JavaScript gibi, bir JSON dizisi birden çok nesne içerebilir:

    örnek

    "çalışanlar":[

    ("ad":"Peter","soyadı":"Jones")
    ]

    Yukarıdaki örnekte "çalışanlar" nesnesi, üç nesne içeren bir dizidir. Her nesne bir kişinin kaydıdır (adı ve soyadıyla birlikte).

    JSON, JavaScript Sözdizimini kullanır

    JSON sözdizimi, JavaScript nesne gösteriminden türetildiğinden, JavaScript'te JSON ile çalışmak için çok az ek yazılım gerekir.

    JavaScript ile bir dizi nesne oluşturabilir ve buna şu şekilde veri atayabilirsiniz:

    örnek

    var çalışanlar = [
    ("ad":"John", "soyadı":"Doe"),
    ("ad":"Anna", "soyadı":"Smith"),
    ("ad":"Peter","soyadı": "Jones")
    ];

    Bir dizi JavaScript nesnesindeki ilk girişe şu şekilde erişilebilir:

    Ayrıca, şu şekilde alabilirsiniz:

    Veriler şu şekilde değiştirilebilir:

    Şu şekilde de değiştirilebilir:

    Bir sonraki bölümde, JSON metnini bir JavaScript nesnesine nasıl dönüştüreceğinizi öğreneceksiniz.

    JSON dosyaları
    • JSON dosyaları için dosya türü ".json"
    • JSON metni "application/json" için MIME türü