Değişkenler, diziler ve nesneler, veri temsilinin tanıdık ve kullanışlı bir biçimidir. Verileri, PHP sunucu dilinde gerekli olmayan tarayıcı dili JavaScript'te tanımlamak gelenekseldir. JSON formatı, bunları tek bir bütün halinde özetlemenize ve programlama diline odaklanmanıza olanak tanır. Bu durumda veriler çiftlere dönüşür: “isim = değer”. Her birindeki değer aynı zamanda bu tür çiftlerin bir koleksiyonu da olabilir.

JSON'u küme parantezleriyle ilişkilendirmek gelenekseldir ve JSON formatı = JavaScript Nesne Gösterimi olduğundan ikincisi oldukça haklıdır. Son özellikle dinamik yıllarda çok şey değişti. Belirli bir amaç için yaratılanlar genellikle beklenmedik sonuçlar getirir veya yeni ufuklar açar.

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

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

JSON'un ortaya çıkışının AJAX kullanımıyla ilişkili olduğuna inanılıyor, ancak aslında ilişkisel ve nesne gösterimi (nesneleri tanımlamak ve kullanmak için sözdiziminin özellikleri), JSON ile aralarındaki veri alışverişinden çok daha fazla ilgili bir ilişkiye sahiptir. tarayıcı ve sunucu.

Modern sitelerin sayfalarının içeriği gerçekten “devasa” (hacimli) hale geldiğinden, veri alışverişi formatının verimliliği özel bir önem kazanmıştır. Bu, JSON'un yeni bir veri temsili haline geldiği anlamına gelmez, ancak uzun süredir JavaScript sözdiziminin bir öğesi olduğu gerçeği önemlidir.

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

Kiril ve JSON

Elbette, bu tamamen beklenmedik fenomeni kullanmanın bir anlamı yok, Rus harfleriyle yazılan değişkenlerin değerlerinin ne kadar kolay anlamsız hale geldiğini hatırlayarak: isimler, özellikle de dış olanlar hakkında ne söyleyebiliriz.

Kiril adlarındaki girişimin, sürekli uğraşmak zorunda olduğu tarayıcının dış ortamı tarafından destekleneceği şüphelidir. Ancak bu gerçek, JSON formatının geliştiricinin istediği gibi ad ve değer yazabilme yeteneği olması gibi basit bir nedenden dolayı dikkati hak ediyor. Bu önemlidir, çünkü her görevde uygulama alanının gerektirdiği şekilde tanımlanması, hata ayıklamayı önemli ölçüde basitleştirir ve hata sayısını azaltır.

Sözdizimsel yeniliğin (JSON) temelinin tam olarak ne olduğu önemli değil, yazışmayı kurma konusunda yasal hak ve gerçek fırsatı vermesi önemlidir: "herhangi bir ad = herhangi bir değer".

JavaScript diline saygı göstermeliyiz: sözdizimi tarafından sağlananlar geliştiriciyi yükümlü kılmaz ve ona hiçbir şey empoze etmez. Geliştirici, bir veri modelini ve bunların kullanımına yönelik bir algoritmayı en iyi şekilde oluşturmak için dil sözdizimini serbestçe kullanır.

PHP ve JSON

Sunucu (özellikle PHP aracılığıyla), verileri JSON formatında kabul ederek, verileri olduğu gibi işleme ve sonucu benzer bir formatta tarayıcıya geri gönderme olanağı sağlar. PHP kaynak dizisi:

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

Tarayıcıya teslim için JSON'a dönüştürün:

  • $cJS = json_encode($cJSON).

Sonuç:

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

Fotoğrafta gösterilen yuvalamaya izin verilir.

Burada oluşturulan dizi, otomatik indeksi “0” olan yeni bir “kendi içine” elemanı ve daha sonra tekrar belirtilen indeksi “z” ile eklenmiştir.

Json_decode(), bir JSON dizesini bir PHP dizisine dönüştürür. Benzer sonuçlara, işlevler ve patlatma() yöntemi değiştirilerek de ulaşılabilir. 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 formatı (RFC 4627 standart açıklaması) 4'ten önemli ölçüde daha fazla iç içe yerleştirme düzeyi sağlar, ancak bu özellik kötüye kullanılmamalıdır.

Hiçbir zaman makul yeterliliğin ötesine geçmemek en iyisidir; bu, kodu okunabilir hale getirerek diğer geliştiriciler için hata ayıklamayı ve anlamayı kolaylaştırır.

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

JSON dosyaları

JSON'un pratikte kullanımı genellikle insan tarafından okunabilen kısa bir dizeyle 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 (nesne önbelleği) uygulanmasında etkili bir şekilde kullanılabilir.

Kurumsal personel ve JSON formatı: örnek

Genellikle bir kişiyle ilgili kayıt, soyadı, adı, soyadı, doğum yılı, uzmanlık alanı, eğitimi vb. ve birkaç başka basit değerden oluşur. Özellikle talepkar şirketlerde bile bir kişiyle ilgili kayıt bir düzine veya iki alanı geçmeyecektir. Bu algılanabilir ve bir veritabanı dizisine yerleştirilebilir.

Bir şirkette birden fazla kişi çalışıyorsa bu bir şeydir, ancak on binlerce kişi varsa bu tamamen farklıdır. Veritabanını kullanmaya devam edebilirsiniz ancak dosya olarak saklamak daha pratik ve kullanımı kolay görünmektedir.

JSON düz metin dosyasıdır. Personel masasındaki durum söylemeye gerek yok. Her zaman okuyabilirsiniz. Dosya içeriğine kendi servis bilgilerini ekleme alışkanlığı olmayan her metin editöründe de açma ve düzenleme imkanı mevcuttur. Genel olarak, *.json hem tarayıcının hem de dosyanın içindeki saf metindir; bir dizedir.

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

Bu, kupalar ve seramikler üzerine renkli 3D baskı sağlayan bir site tarafından oluşturulan dosya içeriğinin bir örneğidir. 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 herhangi bir sorun yaşanmaz: PHP dosyayı okur, ayrıştırır ve tarayıcıya iletir. Ziyaretçi tarafından değiştirilen veriler sunucuya döndürülür ve geri yazılır.

Bu kullanım durumunda dosya, kodun dışında saklanan bir değişken görevi görür. Gerekirse değişken dosyadan bir değer alır ve sitenin sağladığı diyalogda ziyaretçi tarafından değiştirilirse tüm değişiklikler olduğu gibi kaydedilecektir. Dosyanın içeriğini okuyup kontrol etmenize gerek yoktur.

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

XML ve JSON

“Her şeyin bir zamanı vardır”, programlamanın ortaya çıkmasından önce bile aksiyom olarak kabul edilen klasik bir bilgidir. "Hiçbir şey öylece belirmiyor" - bu aynı zamanda insanın yapay bir dilde ilk anlaşılır programı yazmasından önce de oldu.

Veri formatları gerçek ihtiyaçlardan doğar ve elde edilen 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örevlerini harika bir şekilde yerine getiriyor ve açıkça tarih olmayacak. Ve JSON 2006 yılına kadar kullanıldı; ancak her geliştirici, verilerini temsil etmek için belirli seçenekleri açıklamayı görevi olarak görmüyordu.

Uygulamada, JSON'u bu şekilde kullanmayan, ancak "isim = değer" çiftlerini mükemmel şekilde depolayan ve bunları doğru zamanda doğru algoritmaların kullanımına sunan BASIC dilinde 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 formattır, ancak dizeleri ve dizileri ayırma ve birleştirme yeteneğinin çok daha derin kökleri vardır.

JavaScript dilinin birleştirme/bölme işlevleri ve PHP dilinin patlatma/patlatma işlevleri, hem XML, JSON veri formatlarını hem de kendi sürümünüzü rahat ve verimli bir şekilde kullanmanıza olanak tanır. İkincisi genellikle en uygunudur, ilk ikisi ise genel kullanım seçenekleri için idealdir. Bilgiler başka bir geliştiriciye, sunucuya, dosyaya veya veritabanına aktarılıyorsa XML ve JSON'u bulmanın daha iyi bir yolu yoktur. Herkes onlarla çalışır, dolayısıyla bilginin iletilmesi/alınması yorum gerektirmez.

JSON'u Android'de kullanma

Android'de JSON formatında veri okumak ve yazmak yalnızca bir norm değildir, aynı zamanda bu özel veri formatıyla çalışmaya odaklanmış birçok nesne de vardır.

Bu durumda JSON formatı kullanılır. Bu doğru olabilir, ancak sorun sosyal ağların olağanüstülüğü değil, bilginin "isim = değer" formatında sunulmasının hem programlama hem de kullanım için gerçekten uygun olmasıdır. Katı ve karmaşık "XML"in aksine, bu gerçekten insan dostu bir formattır.

İlişkisel Diziler

Bazen değişkenlerin tanımlanması (JavaScript) veya en azından bir başlangıç ​​değerinin belirtilmesi (PHP) gerekir. Her iki durumda da değişkenin türü çok kolay bir şekilde değiştirilebilir. Dil gerekirse bu dönüşümü otomatik olarak gerçekleştirir.

Peki değişken neden adını değiştirmesin, algoritmanın yürütülmesi sırasında ortaya çıkmasın ve ona artık ihtiyaç duyulmadığında ortadan kaybolmasın? İlişkisel diziler bu sorunu çözer, ancak bu tür nispeten dinamik değişkenler kullanıldığında, dizi adı ve karşılık gelen sözdizimsel yapılar kullanıldıkları yeri takip edecektir.

Bu durum özellikle PHP'de telaffuz edilir, ancak değişken adındaki "$" sembolü ve nesnenin içindeki "$this->" kombinasyonu ile buna katlanabilirsiniz. JavaScript ve PHP'yi aynı anda programlamak, ilk başta her şeyin ne kadar farklı olduğuna gerçekten şaşırıyorsunuz ama sonra her şey o kadar tanıdık ve doğal hale geliyor ki...

İlişkisel Dizi -> JSON

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

İkinci dizi sayfaya ilişkin verileri içerir:

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

Belge, PHPOffice/PHPWord kütüphanesinin kurulu olduğu sunucuda oluşturulur. Site, JavaScript kullanarak bu dizilerin değerlerini yönetmenize olanak 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 formatı dinamik değişkenler sorununu çözer. Burada gereksiz sözdizimsel karmaşa 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 bir nesneden değer adını ve değeri alır. Başlangıçta, ojInfo değişkenine atanan JSON dize nesnesinin üç öğesi vardır: Ad, yaş ve iş. Biraz sonra Durum değişkeni eklenir.

İlk silme operatöründen sonra ojInfo satırı age öğesini, ikinci silme işleminden sonra ise çalışma öğesini kaybeder. Bu dizenin belirli bir anlama sahip değişkenlerden oluşan bir seçim olduğunu varsayarsak, JSON'u kullanarak, JavaScript dilini tanımlama ve işleme operasyonel alanı (sözdizimi) dışında herhangi bir kümeyi gerçekten oluşturabilir, değiştirebilir ve silebilirsiniz.

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

Elbette JSON'u duymuşsunuzdur. Nedir? Ne yapabilir ve nasıl kullanılır?

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

  • JSON nedir?
  • JSON ne için kullanılır?
  • JSON dizesi nasıl oluşturulur?
  • JSON dizesinin basit bir ö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 saklamanı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. Ayrıca karmaşık veri yapıları oluşturmak için dizileri ve nesneleri birbirine bağlayabilirsiniz.

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'un aşağıdaki avantajları vardır:

  • Kompakt.
  • Cümlelerinin hem insanlar hem de bilgisayarlar tarafından okunması ve oluşturulması kolaydır.
  • Çoğu programlama dili için (sayılar, dizeler, boolean'lar, diziler vb.) kolaylıkla bir veri yapısına dönüştürülebilir.
  • Birçok programlama dilinde JSON yapılarını okumaya ve oluşturmaya yönelik işlevler ve kütüphaneler bulunur.

JSON adı, JavaScript Nesne Gösterimi anlamına gelir. Adından da anlaşılacağı gibi, nesneleri (diğer dillerdeki ilişkisel diziler oluşturmaya benzer şekilde) ve dizileri tanımlamanın bir yolunu temel alı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üklemeye gerek kalmadan iletişim kurmasına olanak tanıyan AJAX kullanılarak iletilir.

  • Kullanıcı bir çevrimiçi mağazadaki ü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ği oluşturur.
  • 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 dizisi oluşturur ve bunu tarayıcıya gönderir.
  • Tarayıcıda çalışan JavaScript, JSON dizesini alır, kodunu çözer ve ürün bilgilerini kullanıcıya sayfada görüntüler.
  • JSON'u, GET veya POST isteklerine parametre olarak bir JSON dizesi ileterek tarayıcıdan sunucuya veri göndermek için de kullanabilirsiniz. Ancak AJAX istekleri aracılığıyla veri aktarımı basitleştirilebildiğinden bu yöntem daha az yaygındır. Örneğin ürün kimliği, bir GET isteğinin parçası olarak URL'ye eklenebilir.

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

    JSON dizesi nasıl oluşturulur?

    JSON dizesi oluşturmaya yönelik birkaç temel kural vardır:

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

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

    Basit JSON dizesi örneği

    Aşağıda JSON formatında bir sipariş ö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 detaylı olarak inceleyelim:

    • Kıvrımlı parantezleri (( ve )) kullanarak bir nesne oluşturuyoruz.
    • Nesnenin birkaç ad/değer çifti vardır: "orderID": 12345 "orderId" adında ve tamsayı değerinde bir özellik 12345 "shopperName": "Vanya Ivanov" "shopperName" adında ve "Vanya Ivanov" dize değerinde bir özellik " "alışverişçininE-postası": " [e-posta korumalı]" "shopperEmail" adında bir dize değerine sahip bir özellik " [e-posta korumalı]" "contents": [ ... ] Değeri "orderCompleted" dizisi olan "contents" adında bir özellik: true "orderCompleted" adında bir özellik ve boolean değeri true
    • "İçerikler" dizisinde, siparişteki tek tek öğeleri temsil eden 2 nesne vardır. Her nesne 3 özellik içerir: ürünKimliği, ürünAdı ve miktar.

    Bu arada, JSON, JavaScript nesnelerinin bildirilmesine dayalı olduğundan, yukarıdaki JSON dizesini hızlı ve kolay bir şekilde bir JavaScript nesnesi haline getirebilirsiniz:

    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'in karşılaştırılması

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

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

    XML'deki yukarıdaki örnek nesne şu şekilde görünecektir:

    sipariş kimliği 12345 müşteriAdı Vanya Ivanov müşteriE-posta [e-posta korumalı] içindekiler ürünID 34 ürünAdı Süper ürün miktarı 1 ürünID 56 ürünAdı Mucize ürün adedi 3 siparişTamamlandı true

    XML sürümü önemli ölçüde daha büyüktür. Gerçekte 1128 karakter uzunluğundadır, JSON sürümü ise yalnızca 323 karakter uzunluğundadır. XML sürümünün anlaşılması da oldukça zordur.

    Tabii bu çok radikal bir örnek. Daha kompakt bir XML kaydı oluşturmak da mümkündür. Ancak bu bile JSON eşdeğerinden önemli ölçüde daha uzun olacaktır.

    JavaScript'te bir JSON dizesiyle çalışma

    JSON'un basit bir formatı vardır, ancak manuel olarak bir JSON dizesi 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 (veya tam tersi) dönüştürecek araçlar bulunur.

    Bir değişkenden JSON dizesi oluşturma

    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ş bilgilerini 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 ); alarm (JSON.stringify(cart));

    Bu kod şunları üretecektir:

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

    JavaScript'te bir JSON dizesini 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 dizisini 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": "Mucize mallar", \"miktar": 3\ ) \ ], \"siparişTamamlandı": true \ ) \"; var cart = JSON.parse(jsonString); uyarı(cart.shopperEmail); uyarı(cart.contents.productName);

    Örnek siparişimizin JSON stringini içeren bir jsonString değişkeni oluşturduk. Daha sonra bu dizeyi, JSON verilerini içeren bir nesne oluşturan ve bunu cart değişkeninde saklayan JSON.parse() yöntemine aktarırız. Geriye kalan tek şey, içindekiler dizisinin shopperEmail nesnesinin ve ürünAdı'nın özelliklerini görüntüleyerek kontrol 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 çağırma işlevlerini kullanmak gibi başka yeteneklere de sahiptir. Bu tür seçenekler, çeşitli verileri uygun JavaScript nesnelerine dönüştürmek için çok kullanışlıdır.

    PHP'de bir JSON dizesiyle çalışma

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

    PHP değişkeninden JSON dizesi oluşturma

    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 tamamen 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":"Mucize ürün","miktar": 3)],"siparişTamamlandı":true)

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

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

    JSON dizesinden değişken oluşturma

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

    JavaScript'te olduğu gibi bu kod şunları üretecektir:

    [e-posta korumalı] Mucize ürün

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

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

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

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

    [e-posta korumalı] Mucize ürün

    Özyineleme derinliğini ve büyük tamsayıların nasıl işleneceğini belirtmek için json_decode() işlevine başka argümanlar da iletebilirsiniz.

    Çözüm

    JSON, anlaşılması ve kullanılması kolay olmasına rağmen, özellikle AJAX kullanırken uygulamalar ve bilgisayarlar arasında veri aktarımı için oldukça kullanışlı ve esnek bir araçtır. Eğer bir AJAX uygulaması geliştirmeyi planlıyorsanız JSON'un atölyenizin vazgeçilmez bir aracı olacağına hiç şüphe yok.

    ) ve sunucuların kendi aralarında (HTTP yazılım arayüzleri). JSON formatı aynı zamanda karmaşık dinamik yapıların ilişkisel veritabanlarında veya dosya önbelleklerinde saklanması için de oldukça uygundur.

    JSON, JavaScript sözdiziminin bir alt kümesi olduğundan, yerleşik eval() işlevi kullanılarak hızla seri durumdan çıkarılabilir. Ayrıca tamamen işlevsel JavaScript işlevleri eklemek de mümkündür. PHP'de, sürüm 5.2.0'dan itibaren JSON desteği, JSON veri türlerini karşılık gelen PHP türlerine (veya tam tersi) dönüştüren json_decode() ve json_encode() işlevleri biçiminde çekirdeğe dahil edilmiştir.

    Sözdizimi

    JSON iki yapı üzerine kurulmuştur:

    • Bir dizi anahtar/değer çifti. Çeşitli dillerde bu şu şekilde uygulanır: bir obje, kayıt , yapı , sözlük , karma tablosu , anahtarlı liste veya ilişkisel dizi . Anahtar yalnızca bir dize olabilir, değer yalnızca herhangi bir biçimde olabilir.
    • Numaralandırılmış bir değerler kümesi. Birçok dilde bu şu şekilde uygulanır: sıralamak, vektör, liste veya sıra.

    Bunlar evrensel veri yapılarıdır. Teorik olarak, tüm modern programlama dilleri bunları şu veya bu şekilde destekler. JSON farklı programlama dilleri arasında veri alışverişi yapmak için kullanıldığından bu yapılar üzerine inşa edilmesi mantıklıdır.

    JSON'da aşağıdaki formlar kullanılır:

    • Bir nesne, küme parantezleri ( ) içine alınmış sırasız bir ad/değer çiftleri kümesidir. İsim ve değer arasında bir sembol var ": " ve ad/değer çiftleri virgülle ayrılır.
    • Bir dizi (tek boyutlu), seri numaralarına (endekslere) sahip bir değerler kümesidir. Dizi köşeli parantez içine alınmıştır. Değerler virgülle ayrılır.
    • Değer olabilir astarçift ​​tırnak içinde, sayı, değer doğru veya YANLIŞ, nesne, sıralamak veya değer hükümsüz. Bu yapılar birbiri içine yerleştirilebilir.
    • Bir dize, ters eğik çizgi kaçış dizileri kullanılarak, çift tırnak içine alınmış, sıfır veya daha fazla Unicode karakterden oluşan sıralı bir kümedir. Karakterler basit bir dize olarak temsil edilir.
    • İsim bir dizedir.

    Astar dillerde ve Java'da bir dizeye çok benzer. Sayı ayrıca yalnızca ondalık formatın kullanılması dışında C veya Java numarasına çok benzer. Herhangi iki karakter arasına boşluk eklenebilir.

    Aşağıdaki örnek, bir kişiyi tanımlayan bir nesnenin JSON temsilini gösterir. Nesne var sicim ad ve soyadı alanları, adresi açıklayan bir nesne ve telefon numaralarının listesini içeren bir dizi.

    ( "firstName" : "Ivan" , "lastName" : "Ivanov" , "address" : ( "streetAddress" : "Moskovskoe sh., 101, apt. 101" , "city" : "Leningrad" , "postalCode" : 101101 ), "telefonNumaraları" : [ "812 123-1234" , "916 123-4567" ] )

    XML'de böyle bir yapı şuna benzer:

    Ivan Ivanov Moskovskoe sh., 101, daire 101 Leningrad 101101 812 123-1234 916 123-4567

    812 123-1234 916 123-4567

    YAML ile karşılaştırma

    Hem işlevsel hem de sözdizimsel olarak JSON, YAML dilinin bir alt kümesidir. Özellikle YAML 1.2 spesifikasyonu "herhangi bir JSON dosyasının geçerli bir YAML dosyası olduğunu" belirtir. En yaygın YAML ayrıştırıcısı JSON'u da işleyebilir. Sürüm 1.2'den önceki YAML spesifikasyonu, esasen YAML'de UTF-32 için yerel destek eksikliğinin yanı sıra virgül ayırıcıdan sonra boşluk gerekliliği nedeniyle JSON'u tam olarak kapsamıyordu. Ek olarak, JSON spesifikasyonu /* */ tarzı yorumları içeriyordu.

    YAML'deki en önemli fark, JSON'da benzerleri olmayan sözdizimi uzantıları kümesidir:

    İlişkisel: YAML ilişkisel verileri destekler: YAML belgesinde, daha önce bir dosyada/akışta oluşan bir bağlantıya başvurabilirsiniz. Özyinelemeli yapılar bu şekilde ifade edilebilir. Genişletilebilir: YAML, ilkellerin (ör. dizeler, sayılar, boolean'lar) ötesinde genişletilebilir veri türlerini destekler. Bloklar: YAML'de girintili blok sözdizimi mevcuttur; yapılandırılmış verileri gereksiz semboller (her türlü parantez, tırnak işareti vb.) kullanmadan tanımlamanıza olanak tanır.

    JSON Şeması

    JSON Şeması, bir JSON belgesinin yapısını açıklamaya yönelik dillerden biridir. JSON sözdizimini kullanır. XML Şeması, RelaxNG, Kwalify kavramlarına dayanmaktadır. JSON Şeması kendi kendini tanımlayan bir dildir: kullanıldığında, verileri işlemek ve geçerliliğini tanımlamak için aynı serileştirme/seri durumdan çıkarma araçları kullanılabilir.

    Ajax'ta JSON'u kullanma

    Aşağıdaki örnek Javascript kodu, bir tarayıcının sunucudan JSON biçimli bir nesne istemek için XMLHttpRequest'i nasıl kullanabileceğini gösterir (programın sunucu tarafı atlanmıştır; isteklere yanıt olarak verileri JSON dizesi olarak gönderen kodu içermelidir) URL'si).

    Var the_object; var http_request = new XMLHttpRequest(); http_request.open("GET", url, doğru); http_request.send(null); http_request.onreadystatechange = function () ( if ( http_request.readyState == 4 ) ( if ( http_request.status == 200 ) ( the_object = JSON.parse ( http_request.responseText ) ; ) else ( warning( "Şununla ilgili bir sorun oluştu: URL." ) ; ) http_request = null ; ) ) ;

    Bu XMLHttpRequest kullanma örneğinin tüm tarayıcılar için evrensel olmadığını unutmayın (Internet Explorer, Opera, Safari ve Mozilla tabanlı tarayıcılar için kodda bazı farklılıklar olmalıdır). XMLHttpRequest'in kullanımı aynı kaynak politikası nedeniyle sınırlıdır: İsteğe verilen yanıtın URL'si, yanıtı isteyen sayfanın bulunduğu sunucuyla aynı DNS etki alanında olmalıdır. Bir alternatif, istemci ile sunucu arasında iletilen kodlanmış bir işlev çağrısının kullanılmasını içeren JSONP yaklaşımıdır; böylece istemci, JSON kodlu verileri üçüncü taraf etki alanlarından yükleyebilir ve arayan kişiye tamamlanma konusunda bildirimde bulunabilir; ancak bu bazı güvenlik riskleri ve ek sunucu gereksinimleri.

    Alternatif olarak sayfa kodu, JSON verilerini eşzamansız olarak istemek için öğeleri kullanabilir veya yalnızca . Bu yaklaşımlar, XMLHttpRequest'in yaygın desteğinden önce yaygındı.

    JSON verilerini dinamik etiketler kullanarak aktarmak için aynı kaynak politikasını da kullanabilirsiniz, ancak bu durum kodun güvenlik açığına uğramasına neden olur. Daha güvenli bir alternatif olarak kullanılması önerildi. JSONRequest.

    Güvenlik SORULARI

    JSON, verileri serileştirilmiş bir biçimde iletmek üzere tasarlanmış olmasına rağmen, sözdizimi JavaScript'in sözdizimini takip eder ve bu, bir dizi güvenlik sorunu yaratır. Çoğunlukla, harici bir kaynaktan JSON formatında alınan verileri işlemek için, herhangi bir ön doğrulama olmaksızın eval() işlevi bu veriye uygulanır.

    JavaScript değerlendirme()

    JSON, sözdizimsel olarak doğru bir JavaScript kodu parçası gibi göründüğünden, JSON verilerini bir JavaScript programında ayrıştırmanın en basit yolu, JavaScript ifadelerini yürütmek için tasarlanmış yerleşik JavaScript eval() işlevini kullanmaktır. Bu yaklaşımla ek ayrıştırıcıların kullanılmasına gerek yoktur.

    eval() tekniği, kullanılan JSON verilerinin kaynağına güvenilmemesi durumunda sistemi savunmasız hale getirir ( İngilizce). Bu tür veriler, Code Injection saldırıları için kötü amaçlı JavaScript kodu olabilir ( İngilizce). Bu güvenlik açığını kullanarak verileri çalmak ve kimlik doğrulamasını taklit etmek mümkündür. Ancak ek veri doğrulama araçları kullanılarak güvenlik açığı ortadan kaldırılabilir. Örneğin, eval() komutunu çalıştırmadan önce, harici bir kaynaktan alınan veriler normal ifadeler kullanılarak doğrulanabilir. JSON'u tanımlayan RFC, JSON biçimine uygun olup olmadığını kontrol etmek için aşağıdaki kodun kullanılmasını önerir

    Var my_JSON_object = ! (/[^,:()\[\]0-9.\-+Eaeflnr-u \n\r\t]/ .test ( text.replace (/"(\\.|[^"\\] )*"/g , "" )) ) ) && eval("(" + metin + ")" ) ;

    eval()'a daha güvenli bir alternatif olarak, yalnızca JSON verilerini işleyebilen yeni bir işlev olan parseJSON() önerilmiştir. ECMAScript standardının 4. sürümünde tanıtıldı ve "JSON: XML'e Düşük Yağlı Bir Alternatif" makalesinde anlatıldı. Şu anda bir JavaScript kütüphanesi olarak mevcuttur ve ECMAScript'in beşinci baskısına dahil edilecektir.

    Gömülü JSON

    Web tarayıcılarının son sürümleri yerleşik JSON desteğine sahiptir ve bunu, açıklanan soruna yol açan eval() işlevini çağırmadan işleyebilir. Bu durumda JSON işleme genellikle daha hızlıdır. Yani Haziran 2009'da aşağıdaki tarayıcılar yerleşik JSON desteğine sahipti:

    En az beş popüler JavaScript kitaplığı, mevcut olduğunda satır içi JSON'u kullanır:

    Alanlar arası istek sahteciliği

    JSON'un yetersiz kullanımı, siteleri siteler arası istek sahteciliğine (CSRF veya XSRF) karşı savunmasız hale getirir. Etiket, onu kullanan kaynakla aynı etki alanına ait olmayan bir kaynağın kullanılmasına izin verdiğinden, kodun rastgele bir sayfa bağlamında JSON verileri kisvesi altında yürütülmesine izin vererek şifrelerin veya şifrelerin ele geçirilmesini mümkün kılar. Başka bir siteye yetkilendirilen kullanıcıların diğer hassas bilgileri.

    Bu yalnızca JSON verilerinin üçüncü bir tarafça ele geçirilebilecek hassas bilgiler içermesi ve sunucunun tek kaynak politikasına dayanması durumunda bir sorun gibi görünmektedir ( İngilizce), harici bir istek algılandığında verilere erişimin engellenmesi. Sunucu, isteğin geçerliliğini belirlerse ve verileri yalnızca doğruysa sağlarsa bu bir sorun değildir. Bunu belirlemek için HTTP çerezleri kullanılamaz. HTTP çerezlerinin özel kullanımı, siteler arası istek sahteciliği tarafından kullanılır.

    JSONP ve JSONPP

    JSONP (JSON Dolgu) veya "dolgulu JSON", bir geri çağırma işlevinin adı giriş bağımsız değişkeni olarak belirtildiğinde JSON'un bir uzantısıdır.

    Teknoloji, tarayıcının güvenlik politikasının, etiketin sayfanın yüklendiği sunucu dışındaki sunuculara erişim için kullanılmasına izin vermesi gerçeğine dayanmaktadır.

    JSONP teknolojisini kullanmadan (yani yalnızca JSON veri kodlamasını kullanarak), sunucu yalnızca veri döndürebilir. Örneğin şöyle:

    ("kağıt": "A4", "sayım": 5)

    Ancak bu yalnızca veridir ve tarayıcıyı etkileyemez.

    JSONP tekniğini kullanarak geri arama işlevinin adı, çağrı hattındaki (GET) üçüncü taraf sunucuya iletilir:

    Burada jsonp parametresi parseResponse geri çağırma fonksiyonunun adını içerir.

    Artık example.com yabancı sunucusu aşağıdaki kodu döndürebilir:

    ParseResponse(( "kağıt" : "A4" , "sayı" : 5 ))

    Kod artık ilk etki alanının javascript işlevini çağırır.

    Bu fikir ilk olarak 2005 yılında MacPython blogunda önerildi ve şu anda Dojo Toolkit Uygulamaları, Google Toolkit Uygulamaları ve zanox Web Hizmetleri gibi birçok Web 2.0 uygulaması tarafından kullanılıyor. Bu protokolün başka uzantılarının, JSONPP'nin S3DB web hizmetlerine yönelik desteği gibi ek argümanları içermesi önerildi.

    JSONP komut dosyası etiketleri kullandığından çağrılar esasen dünyaya açıktır. Bu nedenle JSONP, hassas verileri depolamak için uygun olmayabilir.

    Uzak sitelerdeki komut dosyası etiketlerinin etkinleştirilmesi, sitedeki herhangi bir içeriği aktarmalarına olanak tanır. Uzak sitede Javascript enjeksiyonuna izin veren güvenlik açıkları varsa orijinal site de bunlardan etkilenebilir.

    JSONPP (dolgulu parametreli JSON) Dolgulu parametreli JSON - JSONP fikrinin geliştirilmesi

    JSONPP, kaynak URL'yi, JSON verilerini işleyecek işlevin adını, verileri aldıktan sonra değerlendirme için bir satır ve verilerin işlenmesi tamamlandıktan sonra değerlendirme için bir satır içerir:

    JSON_call(SRC, JSONP, JSONPP, ONLOAD) ;

    sonunda dönüyor

    Cevap = JSONP(SRC) ( eval(JSONPP(ans) ) ; eval(ONLOAD) ; )

    Genel olarak JSONPP fikrinin kendisi için parametre sayısı önemli değildir. SRC, JSONP, JSONPP (ve bunların sunucu tarafında ve daha sonra istemci tarafında işlenmesi) JSONPP olması için yeterlidir.

    S3DB hizmetiyle çalışma örneğine bakalım.

    Function s3db_jsonpp_call(src, next_eval) ( var call = "call_" + Math .random () .toString () .replace (/\./g, "" ) ; var headID = document.getElementsByTagName ("head" ) [ 0 ] ; var script = document.createElement ("script" ) ; script.id = çağrı; script.type = "text/javascript" ; // dolgulu, parametreli json kullanarak src = src+ "&format=json&jsonp=s3db_jsonpp&jsonpp=" + next_eval+ "&onload=remove_element_by_id("" + script.id + "")" ; script.src = src; headID.appendChild (script) ; // yanıtı al) function s3db_jsonpp(ans, jsonpp) ( eval(jsonpp) ; dönüş ans ; ) function Remove_element_by_id(id) ( var e = document.getElementById (id) ; e.parentNode .removeChild (e) ; return false ; )

    Örnekte, s3db_jsonpp_call() işlevi, başlık kısmındaki DOM'da, src'si JSONPP çağrısına karşılık gelen bir komut dosyası öğesi oluşturur.

    Sunucudan bir yanıt alındıktan sonra s3db_jsonpp() çağrılacaktır - JSONP kurallarına göre olması gerektiği gibi çağrı parametrelerine iletilir.

    s3db_jsonpp() eval(jsonpp) içinde ateşlenecek ve ans değerini döndürecektir.

    eval(onload) çağrısı, kafada oluşturulan betiğin kimliğiyle birlikte kaldır_element_by_id()'nin yürütülmesine ve sonuçta silinmesine yol açar, çünkü örnekteki kimlik, uygulamanın en başında rastgele oluşturulduğu için zaten kullanılmayacaktır. s3db_jsonpp_call() işlevi. Bu çağrı sunucu yanıtındadır.

    Nesne referansları

    JSON standardı nesne referanslarını desteklemez ancak Dojo Araç Takımı, standart JSON'un ek kurallar kullanarak bu tür referansları nasıl destekleyebileceğini gösterir. Özellikle dojox.json.ref modülü, dairesel, çoklu, belgeler arası ve tembel bağlantılar dahil olmak üzere çeşitli bağlantı biçimleri için destek sağlar.

    Ayrıca bkz. Notlar
  • YAML, İşaretleme Dili Değildir (YAML™) Sürüm 1.2 (İngilizce) . - Çalışma Taslağı 2008-05-11.(erişilemez bağlantı - hikaye) Erişim tarihi: 24 Eylül 2009.
  • . RedHanded (07 Nisan 2005). Erişim tarihi: 25 Eylül 2012.
  • Json.Com JSON Şema Teklifi (erişilemez bağlantı - hikaye)
  • RFC4627
  • JSON: XML'in Yağsız Alternatifi. Arşivlendi
  • json2.js (İngilizce) . 12 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 24 Eylül 2009.
  • Gömülü JSON kullanma.
  • IE8'e gömülü JSON. 12 Şubat 2012 tarihinde kaynağından arşivlendi.
  • Opera Presto 2.5'te (İngilizce) desteklenen web özellikleri (10 Mart 2010). 12 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 29 Mart 2010.
  • JSON nesnesinin ES 3.1 uygulaması.
  • Bilet #4429lang=en . 12 Şubat 2012 tarihinde kaynağından arşivlendi.
  • Bilet No: 4429 (22 Mayıs 2009). 12 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Temmuz 2009.
  • Bilet #8111lang=en . 12 Şubat 2012 tarihinde kaynağından arşivlendi.
  • MooTools Temel ve Daha Fazlası 1.3.1. 12 Şubat 2012 tarihinde kaynağından arşivlendi.
  • YUI 2: JSON yardımcı programı (1 Eylül 2009). 12 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Ekim 2009.
  • JSON'u öğrenin (7 Nisan 2010). 12 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 7 Nisan 2010.
  • Jeremy Grossman GMail kullanan web uygulamalarına karşı gelişmiş saldırı teknikleri. White Hat Güvenliği. 12 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Eylül 2009.
  • __future__'den içe aktar * » Uzak JSON - JSONP . bob.pythonmac.org. 12 Şubat 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Eylül 2008.
  • Almeida, Jonas (11 Haziran 2008). "JSON, JSONP, JSONPP? "(S3DB). Erişim tarihi: 26.04.2009.
  • RIAspot Siteler Arası XHR için JSON P.(erişilemez bağlantı - hikaye)
  • Dojo'da JSON referansı. 12 Şubat 2012 tarihinde kaynağından arşivlendi.
  • Bağlantılar
    • Rusça resmi formatlı ana sayfa
    • json.js, json2.js, Douglas Crockford tarafından JavaScript'te JSON verileriyle çalışmak için geliştirilmiş bir kütüphanedir. Daha sonra herhangi bir nesnede bulunan toJSONString yöntemiyle bir Nesneyi genişletir ve onu bir JSON biçimi dizesine dönüştürür.
    • json-rpc.org (İngilizce)
    Belge biçimlendirme dilleriOfis belgeleri

    JSON'un ne olduğunu ve diğer veri formatlarına göre nasıl avantajlara sahip olduğunu inceleyen bir ders.

    JSON Kavramı

    JSON (JavaScript Nesne Gösterimi), verileri JavaScript nesne gösteriminde temsil etmeye yönelik bir metin formatıdır.

    Bu, JSON'daki verilerin bir JavaScript nesnesindekiyle aynı şekilde düzenlendiği anlamına gelir. Ancak ikincisinden farklı olarak, JSON kayıt formatının biraz sonra tartışılacak bazı özellikleri vardır.

    JSON genellikle AJAX ile birlikte kullanılır, böylece sunucu verileri uygun bir biçimde bir JavaScript komut dosyasına aktarabilir ve bu komut dosyası daha sonra sayfada görüntüleyebilir.

    JSON biçimi yapısı

    JavaScript'te nesne oluşturma sürecine aşina olan herkes JSON formatının yapısında yeni bir şey görmeyecektir. Bunun nedeni, JSON'un yapısının bazı sınırlamalarla birlikte bir JavaScript nesnesinin yapısını takip etmesidir.

    JSON'u öğelerden oluşan bir kap olarak düşünmek daha kolaydır. Böyle bir kaptaki her öğe, bir anahtar ve değerden oluşan belirli bir yapısal birimdir.

    Bu durumda değer doğrudan anahtarla ilişkilidir ve anahtar-değer çifti adı verilen bir çift oluşturur. Böyle bir nesnenin değerini alabilmek için onun anahtarını bilmeniz gerekir. Sözdizimsel olarak bu tür veriler JSON'da şu şekilde yazılır:

    Yukarıdaki girişte anahtarın değerden iki nokta üst üste (:) kullanılarak ayrıldığını görebilirsiniz. Bu durumda JSON nesnesindeki anahtarın çift tırnak içine alınması gerekir. Bu, JSON'u bir JavaScript nesnesinden ayıran ilk özelliğidir. Çünkü bir JavaScript nesnesinde anahtarın (nesne özelliğinin) çift tırnak içine alınması gerekmez.

    Örneğin, JavaScript açısından geçerli olan ancak JSON açısından geçerli olmayan bir nesne yapısı:

    Var kişi = ( name: "Ivan"; ) // JavaScript nesnesi

    Uyarı: verilere erişimi zorlaştırmamak için anahtarı adlandırmaya çalışın; Bir isim oluştururken, deve notasyonuna bağlı kalınması veya kelimeleri birbirine bağlamak için alt çizgi ("_") kullanılması tercih edilir.

    JSON'daki anahtar değer şu formatlardan birinde yazılabilir: dize, sayı, nesne, dizi, boolean (doğru veya yanlış boolean değeri), null (özel JavaScript değeri).

    Bu JSON'daki ikinci sınırlamadır çünkü Bir JavaScript nesnesi, işlev de dahil olmak üzere herhangi bir veri türünü içerebilir.

    Var kişi = ( "name" : "Ivan"; "setName": function() ( console.log(this.name); ) ) // JavaScript nesnesi

    Bir öğeyi (anahtar/değer çifti) diğerinden ayırmak için virgül (,) karakterini kullanın.

    Örneğin, çeşitli veri türlerinden oluşan JSON'u düşünün.

    Dikkat: JSON veri formatı, yapısı içerisinde yorumlara izin vermez.

    JavaScript'te JSON ile çalışma

    Bir JavaScript nesnesinden farklı olarak JSON bir dizedir.

    Örneğin:

    // örneğin, kişiVeri değişkeni JSON şeklinde bir dize içerir var kişiVeri = "("isim":"Ivan""yaş":37,"anne":("isim":"Olga"yaş": 58),"çocuklar":["Masha", "Igor", "Tanya"], "evli": doğru, "köpek": boş)";

    JSON ile çalışmak genellikle iki yönde gerçekleştirilir:

  • Ayrıştırma, JSON içeren bir dizeyi bir JavaScript nesnesine çevirme eylemidir.
  • Bir JavaScript nesnesini JSON dizesine dönüştürün. Başka bir deyişle, bu eylem ayrıştırmanın tersini yapar.
  • JSON ayrıştırma

    JSON ayrıştırma, yani. Bir JSON dizesinin bir JavaScript nesnesine çevrilmesi eval() veya parse() yöntemi kullanılarak yapılır.

    eval() yöntemini kullanarak:

    // kişi değişkeni, JSON kodunun çalıştırılmasıyla elde edilen bir JavaScript nesnesidir (string) var kişi= eval("("+personData+")");

    JSON.parse() yöntemini kullanarak:

    // kişi değişkeni, bir JSON dizesinin ayrıştırılmasıyla elde edilen bir JavaScript nesnesidir var kişi = JSON.parse(personData);

    Bir JavaScript nesnesini JSON dizesine dönüştürme

    Bir JavaScript nesnesinin bir JSON dizesine çevrilmesi, JSON.stringify() yöntemi kullanılarak yapılır. Bu yöntem JSON.parse() yönteminin tersini yapar.

    Var PersonString = JSON.strigify(kişi);

    JSON formatının avantajları

    JSON veri formatı aşağıdaki avantajlara sahiptir:

    • bir JSON dizesini bir JavaScript nesnesine dönüştürmek (ayrıştırmak) ve geri döndürmek için tasarlanmış kullanışlı ve kullanımı hızlı yöntemler;
    • açık ve basit veri yapısı;
    • diğer veri formatlarıyla (örn. XML) karşılaştırıldığında çok küçük boyut. Bunun nedeni, JSON biçiminin mümkün olan minimum biçimlendirmeyi içermesidir; Yazarken yalnızca birkaç özel karakter kullanılır. Bu çok önemli bir avantaj çünkü... JSON biçiminde sunulan veriler, diğer biçimlerde sunulduğundan daha hızlı yüklenir.

    Bu formatın pek çok avantajı olması nedeniyle sadece JavaScript'te değil, C, Ruby, Perl, Python, PHP vb. birçok dilde de kullanılır hale geldi.

    JSON ve XML formatlarının karşılaştırılması

    JSON formatının XML formatına göre aşağıdaki avantajları vardır:

  • Bazı veri aktarımlarında JSON boyutu, XML boyutundan önemli ölçüde küçük olacaktır.
  • JSON, JavaScript veri yapılarına XML'den daha iyi dönüştürme yöntemlerine sahiptir.
  • JSON'u oluşturmak XML'den daha kolaydır.
  • Ayrıştırma sonrasında JSON verileriyle çalışmak bir JavaScript nesnesi olarak yapılır.

    //JSON var kişiVeri = "("isim":"Ivan","yaş":37,"anne":("isim":"Olga,"yaş":58),,"çocuklar":["Masha " ,"Igor","Tanya"],"evli": doğru,"köpek": null)"; //JavaScript nesnesi kişi var kişi = JSON.parse(personData);

    Ana noktalara bakalım:

    //anahtarın (özellik) isminin değerlerini alıyoruz kişi.isim; Kişi Adı"]; //anne kişi.anne.adı nesnesinde yer alan anahtar (özellik) adının değerlerini al; //yaş elemanını silin delete(person.age) //anahtarı ekleyin (veya güncelleyin) (property) Person.eye = "brown"; //dizilerle çalışırken, özellikle dizilerle çalışmak üzere tasarlanmış yöntemleri kullanmalısınız //diziden 1 öğeyi kaldırın (splice yöntemi) Person.children.splice(1,1) //diziye bir öğe ekleyin (push yöntemi) ) Person.children.Push("Katya");

    Bir nesnedeki öğeler arasında yineleme yapmak için for..in döngüsünü kullanabilirsiniz:

    For (anahtar bizzat) ( if (person.hasOwnProperty(anahtar)) ( //anahtar = anahtar //değer = kişi console.log("Anahtar = " + anahtar); console.log("Değer = " + kişi) ; ) // kişi nesnesinin bir anahtarı varsa (kişinin bir anahtar özelliği varsa) ) // nesnedeki tüm anahtarları (özellikleri) yineleyin

    Bir dizinin öğeleri arasında yineleme yapmak için aşağıdaki döngüyü kullanabilirsiniz:

    İçin (var i=0; i

    Kullanıcıların bu dosyayı açmasını engelleyen en yaygın sorun, yanlış atanmış bir programdır. Bunu Windows işletim sisteminde düzeltmek için, içerik menüsünde dosyaya sağ tıklamanız, fareyi "Birlikte aç" öğesinin üzerine getirmeniz ve açılır menüden "Bir program seç..." seçeneğini seçmeniz gerekir. Sonuç olarak, bilgisayarınızda yüklü programların bir listesini göreceksiniz ve uygun olanı seçebilirsiniz. Ayrıca "Bu uygulamayı tüm JSON dosyaları için kullan" seçeneğinin yanındaki kutuyu işaretlemenizi de öneririz.

    Kullanıcılarımızın da sıklıkla karşılaştığı bir diğer sorun ise JSON dosyasının bozuk olmasıdır. Bu durum birçok durumda ortaya çıkabilir. Örneğin: dosya bir sunucu hatası nedeniyle eksik indirildi, dosya başlangıçta hasar gördü vb. Bu sorunu çözmek için önerilerden birini kullanın:

    • İhtiyacınız olan dosyayı İnternet'teki başka bir kaynakta bulmayı deneyin. Daha uygun bir sürüm bulma şansınız olabilir. Örnek Google araması: "Dosya dosya türü:JSON" . "Dosya" kelimesini istediğiniz adla değiştirmeniz yeterlidir;
    • Orijinal dosyayı size tekrar göndermelerini isteyin, iletim sırasında hasar görmüş olabilir;