JSON nədir və niyə istifadə olunur? JSON-a giriş json formatı hansı verilənlərlə istifadə olunur?




JSON və ya JavaScript Obyekt Notasiyası açar-dəyər cütləri və sifarişli siyahılar prinsipi əsasında strukturlaşdırılmış məlumatların strukturlaşdırılmamış mətn təsvirini həyata keçirən formatdır. JSON JavaScript ilə yaransa da, o, əksər dillərdə ya yerli olaraq, ya da xüsusi kitabxanaların köməyi ilə dəstəklənir. Tipik olaraq Json veb müştərilər və veb server arasında məlumat mübadiləsi üçün istifadə olunur.

Son 15 il ərzində JSON rəsmi məlumat mübadiləsi standartına çevrilib və internetdə faktiki olaraq hər yerdə istifadə olunur. Bu gün demək olar ki, bütün veb serverlər tərəfindən istifadə olunur. Bu populyarlığın digər səbəbi bir çox verilənlər bazasının JSON-u dəstəkləməsi idi. PostgreSQL və MySQL kimi müasir əlaqəli verilənlər bazaları indi JSON-da məlumatların saxlanmasını və ixracını dəstəkləyir. MongoDB və Neo4j kimi verilənlər bazaları da JSON-u dəstəkləyir, baxmayaraq ki, MongoDB JSON-un bir qədər dəyişdirilmiş versiyasını istifadə edir. Bu yazıda JSON-un nə olduğunu, onun XML-dən üstün cəhətlərini, çatışmazlıqlarını və ondan nə vaxt istifadə etməyin daha yaxşı olduğuna baxacağıq.

JSON formatının nə üçün lazım olduğunu və onun necə işlədiyini başa düşmək üçün təcrübə lazımdır. Əvvəlcə bu misala baxaq:

{
"ad": "Conatan",
"soyad": "Azad adam",
"giriş sayı": 4,
"isWriter": doğru,
“worksWith”: [“Spantree Technology Group”, “InfoWorld”],
"ev heyvanları": [
{
"ad": "Lilly",
"növ": "yenot"
}
]
}

Bu çərçivədə biz insanın bəzi xüsusiyyətlərini aydın şəkildə müəyyən etdik. Əvvəlcə adını, soyadını, sistemdəki girişlərin sayını, bu şəxsin yazıçı olub-olmadığını, işlədiyi şirkətlərin siyahısını və ev heyvanlarının siyahısını müəyyənləşdirdik. Bu və ya oxşar struktur serverdən veb-brauzerə və ya mobil proqrama köçürülə bilər ki, bu da daha sonra bu məlumatla lazım olan hər şeyi edə bilər, məsələn, onu göstərə və ya saxlaya bilər.

JSON minimum sayda dəyər növləri olan ümumi məlumat formatıdır - sətirlər, rəqəmlər, mantiq (bir və ya sıfır), siyahılar, obyektlər və null. JSON JavaScript-in alt dəsti olsa da, ən populyar proqramlaşdırma dillərində bu cür məlumatlar var və JSON-u müxtəlif dillərdə yazılmış proqramlar arasında məlumat ötürmək üçün yaxşı namizəd edir.

Niyə JSON istifadə etməlisiniz?

JSON-un faydalılığını və əhəmiyyətini anlamaq üçün internetdə interaktivliyin tarixini bir az başa düşməliyik. 2000-ci illərin əvvəllərində internet saytlarının interaktivliyi dəyişməyə başladı. O zaman brauzer yalnız məlumatı göstərmək üçün xidmət edirdi, veb-server isə məzmunu nümayiş etdirmək üçün bütün işləri görürdü. İstifadəçi brauzerdə düyməni kliklədikdə, serverə sorğu göndərildi, burada HTML səhifəsi yığılıb göndərildi, göstərilməyə hazır idi. Bu mexanizm yavaş və təsirsiz idi. Bu, məlumatların kiçik bir hissəsi dəyişsə belə, brauzerdən səhifədəki hər şeyi yenidən göstərməyi tələb etdi.

O zaman köçürmələr ötürülən məlumatların miqdarına əsasən hesablanırdı, ona görə də tərtibatçılar bütün səhifənin yenidən yüklənməsinin çox baha başa gəldiyini başa düşdülər və istifadəçi interfeysini təkmilləşdirmək üçün yeni texnologiyalar hesab etdilər. Sonra Internet Explorer 5-də əlavə edilmiş arxa planda veb sorğular etmək imkanı, məlumatları tədricən yükləmək üçün kifayət qədər əlverişli bir yanaşma oldu. Səhifəni yenidən yükləmək əvəzinə, düyməni basmaq sadəcə fonda işləyəcək veb sorğusu verəcəkdir. Məzmun yüklənən kimi yenilənəcək. Onu brauzerlər üçün universal proqramlaşdırma dili olan JavaScript istifadə etməklə idarə etmək olar.

Əvvəlcə məlumatlar XML formatında ötürülürdü, lakin JavaScript-də istifadə etmək çətin idi. JavaScript-də artıq dildə məlumatları təmsil etmək üçün istifadə olunan obyektlər var idi, ona görə də Duqlas Krokford JS obyekt sintaksisini götürdü və JSON adlı yeni məlumat mübadiləsi formatı üçün spesifikasiya kimi istifadə etdi. Bu formatı JavaScript brauzerində oxumaq və təhlil etmək daha asan idi. Tezliklə tərtibatçılar XML əvəzinə JSON istifadə etməyə başladılar.

Hal-hazırda, sürətli JSON məlumat mübadiləsi server və müştəri, mobil proqramlar və hətta daxili sistem xidmətləri arasında məlumatların ötürülməsi üçün faktiki standartdır.

JSON və XML

Yuxarıda dediyim kimi, JSON-a əsas alternativ XML idi və belədir. Bununla belə, XML yeni sistemlərdə daha az yayılır. Və bunun səbəbini anlamaq çox asandır. Aşağıda yuxarıda gördüyünüz məlumatları XML vasitəsilə Json-da yazmaq nümunəsidir:


Conatan
Freeman
4
doğru

Spantree Technology Group
InfoWorld

Lilly
yenot


Məlumatların yazılması üçün mahiyyətcə iki dəfə çox yer tutan kodun artıqlığına əlavə olaraq, XML məlumat strukturunu təhlil edərkən bəzi qeyri-müəyyənliklər də təqdim edir. XML-i JavaScript obyektinə çevirmək onlarla və yüzlərlə kod sətirini çəkə bilər və təhlil edilən hər bir obyekt üçün incə tənzimləmə tələb olunur. JSON-un JavaScript obyektinə çevrilməsi bir sətirdə həyata keçirilir və təhlil edilən obyekt haqqında əvvəlcədən bilik tələb etmir.

JSON Məhdudiyyətləri

Baxmayaraq ki, JSON bir çox proqramlaşdırma dillərində işləmək asan olan nisbətən sıxılmış və çevik məlumat formatıdır, onun bəzi çatışmazlıqları var. Burada bəzi məhdudiyyətlər var:

  • Quruluş yoxdur. Bir tərəfdən, bu, məlumatları istədiyiniz şəkildə təqdim etmək üçün tam rahatlığınız deməkdir. Digər tərəfdən, strukturlaşdırılmamış məlumatları asanlıqla saxlaya bilərsiniz.
  • Yalnız bir növ nömrə. IEEE-754 üzən nöqtə və ikiqat dəqiqlik formatı dəstəklənir. Bu olduqca çoxdur, lakin siz digər dillərdə mövcud olan müxtəlif ədədi növlərdən istifadə edə bilməzsiniz.
  • Tarix növü yoxdur. tərtibatçılar formatlama uyğunsuzluğuna səbəb ola biləcək tarixlərin sətir təsvirlərindən istifadə etməlidirlər. Və ya tarix kimi Unix dövrünün əvvəlindən (1 yanvar 1970-ci il) keçən millisaniyələrin sayını istifadə edin.
  • Hələ şərh yoxdur- birbaşa kodda tələb olunan sahələrə annotasiya edə bilməyəcəksiniz.
  • Detal- JSON XML-dən daha az təfərrüatlı olsa da, ən sıxılmış məlumat mübadiləsi formatı deyil. Yüksək səviyyəli və ya ixtisaslaşmış xidmətlər üçün daha səmərəli formatlardan istifadə etmək istərdiniz.

JSON-dan nə vaxt istifadə etməlisiniz?

Brauzer və ya yerli mobil proqramla qarşılıqlı əlaqədə olan proqram təminatı inkişaf etdirirsinizsə, JSON-dan istifadə etmək daha yaxşıdır. XML-in istifadəsi köhnəlmişdir. Serverlər arasında ünsiyyət üçün JSON çox səmərəli olmaya bilər və Apache Avro və ya Apache Thrift-ə bənzər seriallaşdırma çərçivəsini istifadə etmək daha yaxşıdır. Hətta burada JSON pis seçim deyil və sizə lazım olan hər şeyi verə bilər. Ancaq nəyi seçmək barədə dəqiq cavab yoxdur.

MySQL verilənlər bazalarından istifadə edirsinizsə, proqramınız verilənlər bazasında görülən işlərdən çox asılı olacaq. JSON-u dəstəkləyən əlaqəli verilənlər bazalarında ondan mümkün qədər az istifadə etmək yaxşı təcrübə hesab olunur. Əlaqəli verilənlər bazaları müəyyən bir sxemə malik məlumatlar üçün nəzərdə tutulmuşdur. Onların əksəriyyəti JSON məlumat formatını dəstəkləsə də, onunla işləmək performansı xeyli aşağı olacaq.

nəticələr

JSON, əsasən veb serverlər və brauzerlər və ya mobil proqramlar arasında məlumatların göndərilməsinə yönəlmiş məlumat formatıdır. Format sadə dizayna və çevikliyə malikdir, oxumaq və başa düşmək asandır və əksər proqramlaşdırma dillərində belə məlumatlarla işləmək asandır. Ciddi sxemin olmaması formatda çevikliyə imkan verir, lakin bu çeviklik bəzən məlumatların oxunmasını və başa düşülməsini çətinləşdirə bilər.

Scala və ya Elm kimi güclü tipli dillərdə JSON ilə işləməkdə çətinlik çəkə bilərsiniz, lakin formatın geniş şəkildə mənimsənilməsi o deməkdir ki, hətta mürəkkəb problemlərin həllində kömək edəcək kommunal proqramlar və kitabxanalar var. İndi json-un nə olduğunu və ondan necə istifadə edəcəyinizi bilirsiniz.

JSON (JavaScript Object Notation) məlumat ötürmə formatıdır. Adından da göründüyü kimi, format JavaScript proqramlaşdırma dilinə əsaslanır, lakin digər dillərdə də (Python, Ruby, PHP, Java) mövcuddur.

JSON .json uzantısından istifadə edir. Digər fayl formatlarında (məsələn, .html) istifadə edildikdə, JSON sətri sitat gətirilir və ya dəyişənə təyin edilir. Bu format asanlıqla veb server və müştəri və ya brauzer arasında ötürülür.

Yüngül və asan başa düşülən JSON XML-ə əla alternativdir.

Bu dərslik sizi JSON-un üstünlükləri, obyektləri, ümumi strukturu və sintaksisi ilə tanış edəcək.

JSON sintaksisi və quruluşu

JSON obyekti açar-dəyər formasındadır və adətən əyri mötərizələrdə yazılır. JSON ilə işləyərkən bütün obyektlər .json faylında saxlanılır, lakin onlar proqramın kontekstində ayrıca obyektlər kimi də mövcud ola bilərlər.

JSON obyekti belə görünür:

"ad_ad" : "John",
"soyad_adı" : "Smit",
"location" : "London",
"online": doğru,
"izləyicilər" : 987

Bu çox sadə bir nümunədir. JSON obyekti çoxlu sətirlərdən ibarət ola bilər.

Gördüyünüz kimi, obyekt əyri mötərizələrə daxil edilmiş açar-dəyər cütlərindən ibarətdir. JSON-da verilənlərin çoxu obyekt kimi yazılır.

Açar və dəyər arasında iki nöqtə qoyulur. Hər cütdən sonra vergül qoymaq lazımdır. Nəticə belədir:

"açar" : "dəyər", "açar" : "dəyər", "açar" : "dəyər"

JSON açarı soldadır. Açar cüt dırnaq içərisində yerləşdirilməlidir. İstənilən etibarlı sətir açar kimi istifadə edilə bilər. Bir obyekt daxilində bütün düymələr unikal olmalıdır. Açarda boşluq (“ad”) ola bilər, lakin proqramlaşdırmada belə açara daxil olmaqda problemlər ola bilər. Buna görə boşluq əvəzinə alt xətt ("ad_ad") istifadə etmək daha yaxşıdır.

JSON dəyərləri sütunun sağ tərəfindədir. İstənilən sadə məlumat növü dəyər kimi istifadə edilə bilər:

  • Simlər
  • Nömrələri
  • Obyektlər
  • Massivlər
  • Boolean data (doğru və ya yanlış)

Dəyərlər mürəkkəb məlumat növləri ilə də təmsil oluna bilər (məsələn, obyektlər və ya JSON massivləri).

JSON yuxarıda sadalanan məlumat növlərinin hər biri üçün fərdi sintaksisi dəstəkləyir: əgər dəyər sətirlə təmsil olunursa, o, sitat gətiriləcək, lakin rəqəmdirsə, olmayacaq.

Tipik olaraq, .json fayllarında məlumatlar sütunda yazılır, lakin JSON cərgədə də yazıla bilər:

( "ad_ad" : "John", "soyad_adı" : "Smith", "online" : doğru, )

JSON məlumatları adətən digər fayl növlərinə belə yazılır.

JSON məlumatlarını sütuna yazmaqla siz faylın oxunuşunu yaxşılaşdırırsınız (xüsusilə də faylda çoxlu məlumat varsa). JSON sütunlar arasındakı boşluqlara məhəl qoymur, beləliklə siz onlardan məlumatlarınızı idarə olunan sayda sütuna bölmək üçün istifadə edə bilərsiniz.

"ad_ad" : "John",
"soyad_adı" : "Smit",
"online": doğrudur

Qeyd edək ki, JSON obyektləri JavaScript obyektlərinə çox bənzəyir, lakin onlar eyni formatda deyillər. Məsələn, siz JavaScript-də funksiyalardan istifadə edə bilərsiniz, lakin JSON-da deyil.

JSON-un əsas üstünlüyü ondan ibarətdir ki, bu formatdakı verilənlər bir çox məşhur proqramlaşdırma dilləri tərəfindən dəstəklənir, ona görə də onlar tez ötürülə bilər.

İndi siz əsas JSON sintaksisi ilə tanışsınız. Lakin JSON faylları daxili massivləri və obyektləri ehtiva edən mürəkkəb, iyerarxik strukturlara malik ola bilər.

JSON-da mürəkkəb növlər

JSON onlara təyin edilmiş açarın dəyəri kimi ötürüləcək iç-içə obyektləri və massivləri saxlaya bilər.

Yuvalanmış obyektlər

Aşağıda bir nümunə tapa bilərsiniz - istifadəçi məlumatlarını ehtiva edən users.json faylı. Hər bir istifadəçi üçün

(“john”, “jesse”, “drew”, “jamie”) daxili obyekt dəyər kimi ötürülür ki, bu da öz növbəsində açar və dəyərlərdən ibarətdir.

Qeyd: İlk daxili JSON obyekti qırmızı rənglə vurğulanır.

"John" :(
"istifadəçi adı" : "John",
"location" : "London",
"online": doğru,
"izləyicilər" : 987

"jesse" :(
"istifadəçi adı" : "Jesse",
"location" : "Vaşinqton",
"online" : yalan,
"izləyicilər" : 432

"çəkdi" :(
"username" : "Drew",
"yer": "Paris",
"online" : yalan,
"izləyicilər" : 321

"jami" :(
"istifadəçi adı": "Jamie",
"location" : "Berlin",
"online": doğru,
"izləyicilər" : 654

Qeyd edək ki, buruq mötərizələr həm iç-içə obyektdə, həm də əsas obyektdə istifadə olunur. Yuvalanmış obyektlərdə vergüllər adi obyektlərdə olduğu kimi istifadə olunur.

İç-içə massivlər

Data dəyərlər kimi ötürüləcək JavaScript massivlərindən istifadə edərək JSON-da yuvalana bilər. JavaScript serialın əvvəlində və sonunda kvadrat mötərizələrdən () istifadə edir. Massiv müxtəlif növ verilənləri ehtiva edə bilən verilənlərin ardıcıl toplusudur.

Massiv qruplaşdırıla bilən böyük miqdarda məlumat ötürmək üçün istifadə olunur. Məsələn, istifadəçi məlumatlarını qeyd etməyə çalışaq.

{
"ad_ad" : "John",
"soyad_adı" : "Smit",
"location" : "London",
"veb saytları" : [

"təsvir" : "iş",
"URL" : "https://www.johnsmithsite.com/"

},
{

"desciption" : "dərsliklər",
"URL" : "https://www.johnsmithsite.com/tutorials"

"sosial Mediya" : [

"təsvir" : "twitter",
"link" : "https://twitter.com/johnsmith"

"təsvir" : "facebook",
"link" : "https://www.facebook.com/johnsmith"

"təsvir": "github",
"link": "https://github.com/johnsmith"

“Vebsaytlar” və “sosial_media” düymələri kvadrat mötərizədə yerləşdirilən dəyərlər kimi massivlər təyin edilir.

İç-içə massivlərdən və obyektlərdən istifadə edərək, siz mürəkkəb məlumat iyerarxiyası yarada bilərsiniz.

JSON yoxsa XML?

XML (genişləndirilə bilən işarələmə dili) məlumatları insanlar və maşınlar üçün asan başa düşülən formada saxlamağa imkan verir. XML formatı çoxlu sayda proqramlaşdırma dilləri tərəfindən dəstəklənir.

XML və JSON çox ortaq cəhətlərə malikdir. Bununla belə, XML daha çox mətn tələb edir, yəni belə fayllar daha böyükdür və oxumaq və yazmaq daha çətindir. Üstəlik, XML yalnız XML tərcüməçisindən istifadə etməklə işlənir, JSON isə sadə bir funksiyadan istifadə etməklə işlənə bilər. JSON-dan fərqli olaraq, XML massivləri saxlaya bilməz.

Gəlin iki faylı müqayisə edək: onlar eyni məlumatları ehtiva edir, lakin birincisi XML formatında, ikincisi isə JSON-da yazılır.

users.xml

John London

Jesse Vaşinqton

Drew Paris

Jamie Berlin

users.json
("istifadəçilər": [

("istifadəçi adı" : "John", "yer" : "London"),
("istifadəçi adı" : "Jesse", "yer" : "Vaşinqton"),
("istifadəçi adı" : "Drew", "yer" : "Paris"),
("istifadəçi adı" : "JamieMantisShrimp", "yer" : "Berlin")

JSON çox yığcam formatdır və XML qədər çox teq tələb etmir. Bundan əlavə, XML, JSON-dan fərqli olaraq, massivləri dəstəkləmir.

Əgər HTML ilə tanışsınızsa, XML formatının ona çox oxşar olduğunu görəcəksiniz (xüsusən də etiketlər). JSON daha sadədir, daha az mətn tələb edir və məsələn, AJAX proqramlarında istifadə etmək daha asandır.

Təbii ki, tətbiqin ehtiyaclarından asılı olaraq format seçilməlidir.

JSON üçün alətlər

JSON adətən JavaScript-də istifadə olunur, lakin format digər proqramlaşdırma dillərində geniş istifadə olunur.

JSON uyğunluğu və emalı haqqında ətraflı məlumatı layihənin veb saytında və jQuery kitabxanasında tapa bilərsiniz.

Sıfırdan JSON yazmaq nadirdir. Tipik olaraq, məlumatlar mənbədən yüklənir və ya JSON-a çevrilir. Siz açıq mənbə aləti olan Mr. Məlumat çeviricisi. XML-i JSON-a və əksinə çevirmək üçün utilities-online.info-dan istifadə edin. Avtomatik alətlərlə işləyərkən nəticələri yoxlamağı unutmayın.

JSON faylları (çevrilmiş məlumatlar daxil olmaqla) JSONLint xidmətindən istifadə etməklə yoxlana bilər. JSON-u veb inkişaf kontekstində sınamaq üçün JSFiddle-a baxın.

Nəticə

JSON sadə və yüngül məlumat formatıdır. JSON fayllarını köçürmək, saxlamaq və istifadə etmək asandır.

Bu gün JSON tez-tez API-lərdə istifadə olunur.

JSON məlumatların yazılması üçün mətn formatıdır. O, mətn şəklində həm tək ədədi, həm də sətri, həm də mürəkkəb strukturları, məsələn, verilənləri olan massivləri təmsil etməyə imkan verir. Bu qeyd formatından istifadə rahatdır, çünki o, oxunaqlı və intuitivdir, eyni zamanda çox mürəkkəb məlumat strukturlarını saxlamağa imkan verir. Bundan əlavə, xml-dən daha yığcamdır, ona görə də mənim fikrimcə veb brauzer və server arasında məlumat mübadiləsi üçün daha çox üstünlük verilir.

Nümunələr ilə JSON sintaksisi

json formatı adətən 2 variantda yazılır:

1. Dəyərlərin ardıcıllığı. Məsələn, JSON formatında 10, 15 və "test" ardıcıllığı belə görünür:

2. Cüt-cüt səsyazma açar: dəyər . Misal üçün:

(“Tam adı”: “İvanov Sergey”, “Doğum tarixi”: “03/09/1975”)

Bir az daha mürəkkəb bir nümunə:

("Tam adı": "İvanov Sergey", "Ünvan": ("Şəhər": "Moskva", "Küçə": "Pyatnitskaya", "Ev": "35") )

JSON formatı ilə işləmək üçün PHP funksiyaları

5.2 versiyasından bəri PHP dilində. yalnız 4 funksiya var:

  • json_decode- JSON sətirinin kodunu açır (json format sətirindən məlumat alır)
  • json_encode- Məlumatın JSON təqdimatını qaytarır (məlumatları json sətirinə çevirir)
  • json_last_error_msg- json_encode() və ya json_decode()-a son zəngin xəta mesajını göstərən sətri qaytarır
  • json_last_error- Son səhvi qaytarır

Əsasən, əksər hallarda yalnız iki funksiya istifadə olunur: json_encodejson_decode. Onların sintaksisinin təfərrüatlarına girməyəcəyəm, daha ətraflı məlumat üçün php.net-ə baxa bilərsiniz. İstifadə nümunəsi:

$arr1 = massiv(0,1,2); $json_str = json_encode($arr1); echo $json_str; // json sətirini çıxaracaq: $arr2 = json_decode($json_str); echo $arr2; // çıxacaq: 1

Qeyd : saat rus dilində JSON məlumat formatına kodlaşdırma, json_encode funksiyası rus simvollarını çevirir unicode, yəni. ilə əvəz edir \uXXXX və beləliklə, json sətri insanlar üçün oxunmaz olur (lakin brauzer üçün başa düşülən). Unicode-a çevrilmənin qarşısını almaq istəyirsinizsə (məsələn, kodu sazlayarkən), sadəcə JSON_UNESCAPED_UNICODE seçimindən istifadə edə bilərsiniz.

Həmçinin, kodlaşdırma zamanı qaçan sətirlərin əlavə edilməməsi və nömrələri olan sətirlərin rəqəmlər kimi kodlanması üçün siz JSON_UNESCAPED_SLASHES və JSON_NUMERIC_CHECK istifadə edə bilərsiniz. Nəticədə, json sətirini insanlar tərəfindən oxunaqlı etmək üçün, məsələn, bunu edəcəyik:

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

Bu seçimlərdən istifadə etmədən xətt belə olacaq:

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

və seçimlərdən istifadə edərək oxuna bilən bir xətt əldə edirik:

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

Daha bir məqam: json sətirini deşifrə etmək funksiyasına ehtiyacınız varsa json_decode tam olaraq massivi qaytardı, sadəcə olaraq doğruya bərabər olan funksiyaya ikinci parametr əlavə edin.

$json_str = "( "a":1, "b":2, "c":3 )"; $obj = json_decode($json_str); // obyekti alın echo $obj->a; // 1 çıxacaq $arr = json_decode($json_str, doğru); // assosiativ massiv alın echo $arr["a"]; // 1 çap edəcək

Bununla PHP funksiyaları ilə bağlı araşdırmam yekunlaşır.

JSON formatı ilə işləmək üçün JavaScript funksiyaları

Gəlin ondan başlayaq ki, JSON formatı əvvəlcə JavaScript dili üçün icad edilib və sonra sadəcə müxtəlif dillərdə istifadə olunan ayrıca mətn formatına çevrilib. Görünür, elə buna görə də JSON sintaksisi adi obyektlərin və massivlərin yazılması sintaksisinə çox oxşardır.

// JavaScript-də massiv nümunəsi arr = ; xəbərdarlıq (arr); // 1-i göstərəcək // JavaScript-də obyektin nümunəsi obj = ( "name": "Vasya", "yaş": 35, "isAdmin": false ) alert(obj.name); // "Vasya" çap edəcək

JSON formatına və formatından çevirmək üçün istifadə olunan JavaScript funksiyaları:

  • JSON.parse- JSON sətirinin dekodlanması (sətirin obyektlərə və/yaxud massivlərə çevrilməsi)
  • JSON.stringify- verilənlərin JSON təqdimatını qaytarır (obyektləri və/yaxud massivləri json sətirinə çevirmək)

Bir json sətirini nömrələri olan massivdə deşifrə etməyin sadə nümunəsi:

Str = ""; arr = JSON.parse(küç); xəbərdarlıq (arr); // 1 çap edəcək

Obyektin JSON sətirinə çevrilməsi (seriyalaşdırılması) nümunəsi:

Obj = ( "ad": "Vasya", "yaş": 35, "isAdmin": false ) alert(JSON.stringify(obj)); // göstərəcək ("name":"Vasya","yaş":35,"isAdmin":false)

Obyekti JSON sətirinə seriallaşdırarkən (çevirərkən) metod çağırılır toJSON bu obyekt, əgər varsa. Metod yoxdursa, o zaman obyektin bütün xassələri qeyd olunur. Obyektin toJSON metodu ilə çevrilməsinə nümunə:

Obj = ( "ad": "Vasya", "yaş": 35, "isAdmin": false, toJSON: function() ( this.age; ) ) alert(JSON.stringify(obj)); // 35 çap edəcək

JSON formatının praktik tətbiqi nümunələri

Əslində mən şəxsən JSON formatını 2 əsas vəziyyətdə istifadə edirəm:

1. Ajax sorğularından istifadə edərək brauzer və server arasında məlumatların ötürülməsi.

Məsələn, səhifəni yenidən yükləmədən məlumatları yeniləməli olduğumuz bəzi səhifəmiz var. Deyək ki, serverdən “endirilmək” üçün işçilərin siyahısı və onların məlumatları olan məlumat lazımdır.

JavaScript-də jQuery-dən istifadə edərək biz onu sadələşdiririk və məlumatları brauzerdə cədvəl şəklində göstəririk:

$.getJSON("get-info.php").success(funksiya(data) ( // ajax sorğusu, serverdən verilənlər verilənlər dəyişəninə yazılacaq htmlstr = "

"; üçün (var i=0; i "; // birinci sütun - tam ad htmlstr += " "; // ikinci sütun - Doğum tarixi htmlstr += ""; ) htmlstr = "
" + data[i].birthday + "
"; $("div.info").html(htmlstr); // info sinfi olan div-də nəticədə verilənlərlə cədvəli göstəririk ));

Serverdə ajax sorğusunun edildiyi get-info.php skripti, məsələn, belə ola bilər:

$user_info = massiv(); // verilənlərlə massiv yaradın $user_info = massiv ("fio" => "İvanov Sergey", "ad günü" => "03/09/1975"); $user_info = massiv ("fio" => "Aleksey Petrov", "ad günü" => "18/09/1983"); echo json_encode($user_info); çıxış;

Bu nümunədə, serverdən brauzerə ötürülən JSON sətri belə idi:

[("fio":"Sergey İvanov","ad günü":"03/09/1975"),("fio":"Aleksey Petrov","ad günü":"18/09/1983")]

Mən qəsdən xətti “ağac” şəklində göstərməmişəm, çünki məhz bu formada ötürülür. Və necə qiymətləndirə bilərsiniz, JSON formatında məlumatların qeyd edilməsi çox yığcam olduğu ortaya çıxdı, bu o deməkdir ki, bu məlumatların serverdən brauzerə ötürülməsi demək olar ki, ani olacaq.

2. Verilənlər bazasına mürəkkəb verilənlər strukturlarının yazılması.

Bəzən elə hallar olur ki, müxtəlif verilənləri saxlamaq üçün verilənlər bazasında başqa cədvəl yaratmaq məqsədəuyğun deyil. Tutaq ki, saytda qeydiyyatdan keçmiş istifadəçinin fon rəngini və mətn rəngini fərdiləşdirmək imkanı var.

2 parametr üçün başqa bir cədvəl yaratmaq əvəzinə, sadəcə olaraq cədvəldə istifadəçi parametrləri məlumatlarının yerləşdiriləcəyi istifadəçilərin siyahısı ilə mətn sütunu yarada bilərsiniz. Sonra parametrlərin yeniləmə sorğusu, məsələn, belə ola bilər:

İstifadəçiləri YENİLƏNİN parametrləri SET = "("fon rəngi":"#FFFFFF", "mətn rəngi":"#000000")" HARƏDƏ user_id = 10

Gələcəkdə masadan aldıqdan sonra istifadəçilər php skripti onları asanlıqla parametrləri olan bir sıraya çevirə bilər. Məsələn, əgər $user_info dəyişəni istifadəçilər cədvəlindən istifadəçi üçün alınan məlumatları ehtiva edirsə, parametrləri olan massiv əldə etmək çox sadədir:

$settings = json_decode($user_info["parametrlər"], doğru); echo "Arxa fon rəngi = ".$settings["fon rəngi"]; echo "Mətn rəngi = ".$settings["text-color"];

JSON formatında siz həmçinin, məsələn, alıcının seçdiyi məhsul seçimlərini verilənlər bazasında qeyd edə bilərsiniz.

("15":["45","47"], "18":"52") // 15-ci seçimdə 45 və 47 dəyərləri, 18-ci seçimdə isə 52 dəyəri var

Prinsipcə, hətta səbətin bütün məzmununu JSON formatında yaza bilərsiniz, məsələn, belə:

( "user_id" : 10, "session_id" : "2c2l3h4ii271aojentejtdcmh3", "məhsullar": [ ( "məhsul_id" : 15, "seçimlər" : ( "15" : , "18" : 52), "miqdar" : "qiymət" : 1500 ), ( "məhsul_id" : 16, "seçimlər" : ( "15" : , "18" : 51 ), "miqdar" : 2, "qiymət" : 1000 ) ] )

Adi qeyri-ağac formasında bu JSON sətri belə olacaq:

("user_id":10,"session_id":"2c2l3h4ii271aojentejtdcmh3","məhsullar":[("məhsul_id":15,"seçimlər":("15":,"18":52),"miqdar":1 , "qiymət":1500),("məhsul_id":16,"seçimlər":("15":,"18":51),,"miqdar":2,"qiymət":1000)])

Beləliklə, nümunələrdən göründüyü kimi, demək olar ki, istənilən məlumat JSON formatında saxlanıla və ötürülə bilər.

JavaScript Object Notation (JSON) JavaScript obyekt sintaksisinə əsaslanan strukturlaşdırılmış məlumatların təqdim edilməsi üçün standart mətn formatıdır. O, adətən veb proqramlarında məlumatların ötürülməsi üçün istifadə olunur (məsələn, serverdən bəzi məlumatların veb-səhifədə göstərilə bilməsi üçün müştəriyə göndərilməsi və ya əksinə). Siz bununla tez-tez rastlaşacaqsınız, ona görə də bu məqalədə biz sizə JavaScript-dən istifadə edərək JSON ilə işləmək üçün lazım olan hər şeyi, o cümlədən JSON-un təhlilini təqdim edirik ki, onun daxilindəki verilənlərə daxil ola və JSON yaradasınız.

Xeyr, həqiqətən, JSON nədir?

Biz onu səhifəmizə yükləyəcəyik və onu göstərmək üçün bəzi səliqəli DOM manipulyasiyasından istifadə edəcəyik, məsələn:

JSON qəbul edilir

JSON qəbul etmək üçün biz XMLHttpRequest adlı API istifadə edəcəyik (çox vaxt XHR). Bu çox faydalı JavaScript obyektidir və bizə JavaScript vasitəsilə serverdən resursları əldə etmək üçün şəbəkə sorğuları etməyə imkan verir (məsələn, şəkillər, mətn, JSON, hətta HTML fraqmentləri), yəni biz bütün səhifəni yenidən yükləmədən məzmunun kiçik hissələrini yeniləyə bilərik. . Bu, daha həssas veb səhifələrlə nəticələndi və maraqlı səsləndi, lakin təəssüf ki, onu daha ətraflı şəkildə öyrətmək bu məqalənin əhatə dairəsindən kənardadır.

  1. Almaq istədiyimiz JSON URL-ni dəyişəndə ​​saxlayacağımızdan başlayaq. Aşağıdakı JavaScript kodunu əlavə edin: var requestURL = "https://mdn.github.io/learning-area/javascript/oojs/json/superheroes.json";
  2. Sorğu yaratmaq üçün biz new açar sözündən istifadə edərək XMLHttpRequest konstruktorundan yeni sorğu obyekti nümunəsi yaratmalıyıq. Son sətir olaraq aşağıdakıları əlavə edin: var request = new XMLHttpRequest();
  3. İndi istifadə edərək yeni sorğu açmalıyıq. Aşağıdakı sətri əlavə edin: request.open("GET", requestURL);

    Bu, ən azı iki parametr tələb edir - başqa parametrlər də mövcuddur. Bu sadə nümunə üçün bizə yalnız iki tələb lazımdır:

    • Şəbəkə sorğusu edərkən istifadə ediləcək HTTP metodu. Bu hal yaxşıdır, çünki biz sadəcə bəzi sadə məlumatları əldə edirik.
    • Sorğunun URL-i əvvəllər saxladığımız JSON faylının URL-dir.
  4. Sonra aşağıdakı iki sətir əlavə edin: Biz burada JSON-u təyin edirik ki, XHR serverin JSON-u qaytaracağını və bunun pərdə arxasında JavaScript obyektinə çevrilməli olduğunu bilsin. Sonra sorğunu metoddan istifadə edərək göndəririk: request.responseType = "json"; sorğu.göndər();
  5. Bu bölmənin son biti serverdən cavab cavabını gözləməyi və sonra onun idarə edilməsini əhatə edir. Əvvəlki kodun altına aşağıdakı kodu əlavə edin: request.onload = function() ( var superHeroes = request.response; populateHeader(superHeroes); showHeroes(superHeroes); )

Burada sorğumuza cavabı (mülkdə mövcuddur) superHeroes dəyişənində saxlayırıq; bu dəyişən indi JSON əsaslı JavaScript obyektini ehtiva edəcək! Sonra biz bu obyekti iki funksiya çağırışına keçirik - birincisi doldurulacaq

düzgün məlumatla, ikincisi isə komandadakı hər bir qəhrəman üçün məlumat kartı yaradacaq və onu daxil edəcək
.

Biz kodu, sorğu obyektində yükləmə hadisəsi işə salındıqda işə salınan hadisə idarəedicisinə bükdük (bax) - bunun səbəbi cavabın uğurla qaytarıldığı zaman yükləmə hadisəsinin işə düşməsidir; bunu bu şəkildə etmək təmin edir ki, biz bununla bağlı nəsə etməyə cəhd etdiyimiz zaman request.response mütləq əlçatan olacaq.

Başlığın doldurulması

İndi biz JSON məlumatlarını çıxardıq və onu JavaScript obyektinə çevirdik, yuxarıda əlaqələndirdiyimiz iki funksiyanı yazaraq ondan istifadə edək. Əvvəlcə əvvəlki kodun altına aşağıdakı funksiya tərifini əlavə edin:

Funksiya populateHeader(jsonObj) ( var myH1 = document.createElement("h1"); myH1.textContent = jsonObj["squadName"]; header.appendChild(myH1); var myPara = document.createElement("p"); myPara. textContent = "Doğma şəhər: " + jsonObj["homeTown"] + " // Yarandı: " + jsonObj["formed"] header.appendChild(myPara);

Bu JavaScript obyektinin JSON-dan yarandığını xatırlatmaq üçün parametrə jsonObj adını verdik. Burada əvvəlcə elementi yaradırıq

ilə, onu obyektin squadName xassəsinə bərabər təyin edin və sonra ilə başlığa əlavə edin. Daha sonra bir paraqrafla çox oxşar əməliyyat həyata keçiririk: biz onu yaradırıq, mətnin məzmununu təyin edirik və başlığa əlavə edirik. Yeganə fərq ondadır ki, onun mətni həm homeTown, həm də obyektin formalaşmış xassələrini özündə birləşdirən birləşdirilmiş sətir kimi göstərilmişdir.

Qəhrəman Məlumat Kartlarının yaradılması

Sonra super qəhrəman kartlarını yaradan və göstərən kodun altına aşağıdakı funksiyanı əlavə edin:

showHeroes(jsonObj) ( var heroes = jsonObj["üzvlər"]; üçün (var i = 0; i)< heroes.length; i++) { var myArticle = document.createElement("article"); var myH2 = document.createElement("h2"); var myPara1 = document.createElement("p"); var myPara2 = document.createElement("p"); var myPara3 = document.createElement("p"); var myList = document.createElement("ul"); myH2.textContent = heroes[i].name; myPara1.textContent = "Secret identity: " + heroes[i].secretIdentity; myPara2.textContent = "Age: " + heroes[i].age; myPara3.textContent = "Superpowers:"; var superPowers = heroes[i].powers; for (var j = 0; j < superPowers.length; j++) { var listItem = document.createElement("li"); listItem.textContent = superPowers[j]; myList.appendChild(listItem); } myArticle.appendChild(myH2); myArticle.appendChild(myPara1); myArticle.appendChild(myPara2); myArticle.appendChild(myPara3); myArticle.appendChild(myList); section.appendChild(myArticle); } }

Əvvəlcə JavaScript obyektinin üzvləri xassəsini yeni dəyişəndə ​​saxlayaq. Bu massivdə hər bir qəhrəman üçün məlumat olan bir neçə obyekt var.

Daha sonra massivdəki hər bir obyekti dövrələmək üçün istifadə edirik. Onların hər biri üçün biz:

  1. Gəlin bir neçə yeni element yaradaq:
    ,

    , üç

      .
    • Quraşdırılır

      hazırkı qəhrəmanın adını ehtiva etmək.

    • Məlumatı siyahıya daxil etmək üçün gizli şəxsiyyətiniz, yaşınız və “Supergüclər:” yazan sətirlə üç paraqrafı doldurun.
    • Biz səlahiyyətlər xassəsini superGüclər adlı başqa yeni dəyişəndə ​​saxlayırıq - bu, cari qəhrəmanın supergüclərini sadalayan massivdən ibarətdir.
    • Mövcud qəhrəmanın fövqəlgücləri arasında dövrə vurmaq üçün başqa for loop istifadə edirik - onların hər biri üçün bir element yaradırıq.
    • , super gücləri içinə qoyun və sonra elementin içərisinə listItem qoyun
        (myList) appendChild() istifadə edərək.
      • Etdiyimiz son şey əlavə etməkdir

        ,

          içəri
          (myArticle) və sonra əlavə edin
          V
          . Əşyaların əlavə olunma sırası vacibdir, çünki bu, onların HTML daxilində görünəcəkləri sıradır.

Qeyd. JavaScript obyektinə daxil olmaq üçün istifadə etdiyimiz nöqtə/mötərizə notasiyasına riayət etməkdə çətinlik çəkirsinizsə, bu, superheroes.json faylını başqa tab və ya mətn redaktorunda açmağa və JavaScript-ə baxdığınız zaman ona müraciət etməyə kömək edə bilər. Nöqtə və mötərizə qeydləri haqqında ətraflı məlumat üçün məqaləmizə də müraciət edə bilərsiniz.

Obyektlər və mətn arasında çevirin

Yuxarıdakı nümunə JavaScript obyektinə daxil olmaq baxımından sadə idi, çünki biz JSON cavabını birbaşa JavaScript obyektinə çevirmək üçün XHR sorğusu təyin etdik.