JSON formati: misol va tavsif. JSON formati: ma'lumotlarni yaratish, PHP va JS Json qisqartmalarini dekodlash bilan foydalanish

) va serverlar o'rtasida (HTTP dasturiy interfeyslari). JSON formati murakkab dinamik tuzilmalarni relyatsion ma'lumotlar bazalarida yoki fayl keshlarida saqlash uchun ham juda mos keladi.

JSON JavaScript sintaksisining quyi to'plami bo'lgani uchun uni o'rnatilgan eval() funksiyasi yordamida tezda seriyadan chiqarish mumkin. Bundan tashqari, to'liq ishlaydigan JavaScript funktsiyalarini kiritish mumkin. PHP da, 5.2.0 versiyasidan boshlab, JSON qo'llab-quvvatlashi json_decode() va json_encode() funktsiyalari ko'rinishidagi yadroga kiritilgan bo'lib, ular o'zlari JSON ma'lumotlar turlarini mos keladigan PHP turlariga va aksincha o'zgartiradilar.

Sintaksis

JSON ikkita tuzilmaga qurilgan:

  • Kalit/qiymat juftliklari to'plami. Turli tillarda bu kabi amalga oshiriladi ob'ekt, rekord, tuzilma, lug'at, hash-jadval, kalitli ro'yxat yoki assotsiativ qator. Kalit faqat satr bo'lishi mumkin, qiymat faqat har qanday shakl bo'lishi mumkin.
  • Raqamlangan qiymatlar to'plami. Ko'p tillarda bu kabi amalga oshiriladi massiv, vektor, ro'yxat yoki ketma-ketlik.

Bu universal ma'lumotlar tuzilmalari. Nazariy jihatdan, barcha zamonaviy dasturlash tillari ularni u yoki bu shaklda qo'llab-quvvatlaydi. JSON turli xil dasturlash tillari o'rtasida ma'lumot almashish uchun ishlatilganligi sababli, uni ushbu tuzilmalar asosida qurish mantiqiy.

JSON da quyidagi shakllardan foydalaniladi:

  • Ob'ekt jingalak qavslar ( ) ichiga olingan nom/qiymat juftlarining tartibsiz to'plamidir. Ism va qiymat o'rtasida belgi mavjud ": " , va nom/qiymat juftlari vergul bilan ajratiladi.
  • Massiv (bir o'lchovli) - bu seriya raqamlari (indekslari) bo'lgan qiymatlar to'plami. Massiv kvadrat qavs ichiga olingan. Qiymatlar vergul bilan ajratiladi.
  • Qiymat bo'lishi mumkin chiziq ikki tirnoq ichida, raqam, qiymat rost yoki yolg'on, ob'ekt, massiv, yoki qiymat null. Ushbu tuzilmalar bir-birining ichiga joylashtirilishi mumkin.
  • Satr - teskari chiziqdan qochish ketma-ketliklaridan foydalangan holda, qo'sh tirnoq ichiga olingan nol yoki undan ortiq Unicode belgilarning tartiblangan to'plami. Belgilar oddiy qator sifatida ifodalanadi.
  • Ism qatordir.

Chiziq tillar va Java-dagi satrga juda o'xshaydi. Raqam C yoki Java raqamlariga juda o'xshash, faqat o'nlik formatdan tashqari. Istalgan ikkita belgi orasiga bo'sh joy qo'yish mumkin.

Quyidagi misolda shaxsni tavsiflovchi ob'ektning JSON tasviri ko'rsatilgan. Ob'ekt bor ip ism va familiya maydonlari, manzilni tavsiflovchi ob'ekt va telefon raqamlari ro'yxatini o'z ichiga olgan massiv.

( "firstName" : "Ivan" , "familiya" : "Ivanov" , "manzil" : ( "ko'chaAddress" : "Moskovskoe sh., 101, 101-uy", "shahar" : "Leningrad", "pochta indeksi" : 101101 ), "telefon raqamlari" : [ "812 123-1234" , "916 123-4567" ] )

XMLda bunday tuzilma quyidagicha ko'rinadi:

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

812 123-1234 916 123-4567

YAML bilan taqqoslash

Funktsional va sintaktik jihatdan JSON YAML tilining kichik to'plamidir. Xususan, YAML 1.2 spetsifikatsiyasi "har qanday JSON fayli haqiqiy YAML fayli" ekanligini bildiradi. Eng keng tarqalgan YAML tahlilchisi JSONni ham qayta ishlashi mumkin. 1.2-versiyadan oldingi YAML spetsifikatsiyasi, birinchi navbatda, YAML-da UTF-32-ni mahalliy qo‘llab-quvvatlashning yo‘qligi, shuningdek, verguldan keyin bo‘sh joy qoldirish talabi tufayli JSON-ni to‘liq qamrab olmadi. Bundan tashqari, JSON spetsifikatsiyasiga /* */ uslubidagi sharhlar kiritilgan.

YAML-dagi eng muhim farq JSON-da o'xshash bo'lmagan sintaksis kengaytmalari to'plamidir:

Aloqaviy: YAML aloqador ma'lumotlarni qo'llab-quvvatlaydi: YAML hujjatida siz avvalroq fayl/oqimda paydo bo'lgan langarga murojaat qilishingiz mumkin. Rekursiv tuzilmalarni shu tarzda ifodalash mumkin. Kengaytiriladigan: YAML ibtidoiylardan tashqari kengaytiriladigan ma'lumotlar turlarini qo'llab-quvvatlaydi (masalan, satrlar, raqamlar, mantiqiy). Bloklar: YAML girintili bloklar sintaksisini taklif qiladi; keraksiz belgilardan (har xil qavslar, tirnoqlar va boshqalar) foydalanmasdan tuzilgan ma'lumotlarni tavsiflash imkonini beradi.

JSON sxemasi

JSON sxemasi JSON hujjatining tuzilishini tavsiflovchi tillardan biridir. JSON sintaksisidan foydalanadi. XML Schema, RelaxNG, Kwalify tushunchalari asosida. JSON sxemasi oʻzini-oʻzi tavsiflovchi tildir: foydalanilganda bir xil seriyali/seriyalilashtirish vositalaridan maʼlumotlarni qayta ishlash va uning haqiqiyligini tavsiflash uchun foydalanish mumkin.

Ajaxda JSON dan foydalanish

Quyidagi misol Javascript kodi brauzer XMLHttpRequest-dan serverdan JSON formatlangan ob'ektni so'rash uchun qanday foydalanishi mumkinligini ko'rsatadi (dasturning server tomoni o'tkazib yuborilgan; u so'rovlarga javoban ma'lumotlarni JSON qatori sifatida yuboradigan kodni o'z ichiga olishi kerak. url).

ob'ektni o'zgartiring; var http_request = new XMLHttpRequest() ; http_request.open("GET", url, rost); http_request.send(null); http_request.onreadystatechange = funktsiya () ( agar ( http_request.readyState == 4 ) ( agar ( http_request.status == 200 ) ( the_object = JSON.parse ( http_request.responseText ) ; ) else ( alert( "Muammo bor edi" URL manzili." ); ) http_request = null ; ) ;

XMLHttpRequest-dan foydalanishning ushbu misoli barcha brauzerlar uchun universal emasligini unutmang (Internet Explorer, Opera, Safari va Mozilla-ga asoslangan brauzerlar uchun kodda ba'zi farqlar bo'lishi kerak). XMLHttpRequest-dan foydalanish bir xil kelib chiqish siyosati tufayli cheklangan: so'rovga javobning URL manzili javob so'ragan sahifa joylashgan server bilan bir xil DNS domenida bo'lishi kerak. Bunga muqobil JSONP yondashuvi boʻlib, mijoz va server oʻrtasida uzatiladigan kodlangan funksiya chaqiruvidan foydalanishni oʻz ichiga oladi, shunda mijoz uchinchi tomon domenlaridan JSON kodlangan maʼlumotlarni yuklashi va qoʻngʻiroq qiluvchini yakunlanganligi toʻgʻrisida xabardor qilishi mumkin, garchi bu baʼzi xavfsizlik xavflarini keltirib chiqaradi va qo'shimcha server talablari.

Shu bilan bir qatorda, sahifa kodi JSON maʼlumotlarini asinxron soʻrash uchun elementlardan foydalanishi mumkin yoki oddiygina . Bu yondashuvlar XMLHttpRequest keng qo'llab-quvvatlanishidan oldin keng tarqalgan edi.

JSON maʼlumotlarini dinamik teglar yordamida uzatish uchun bir xil kelib chiqish siyosatidan ham foydalanishingiz mumkin, ammo bu zaif kodga olib keladi. Xavfsizroq muqobil sifatida undan foydalanish taklif qilingan JSONRequest.

Xavfsizlik masalalari

JSON ma'lumotlarni ketma-ketlashtirilgan shaklda uzatish uchun mo'ljallangan bo'lsa-da, uning sintaksisi JavaScript sintaksisiga amal qiladi va bu bir qator xavfsizlik muammolarini keltirib chiqaradi. Ko'pincha JSON formatida tashqi manbadan olingan ma'lumotlarni qayta ishlash uchun unga eval() funktsiyasi hech qanday dastlabki tekshirishsiz qo'llaniladi.

JavaScript baholash()

JSON JavaScript kodining sintaktik jihatdan toʻgʻri boʻlagi boʻlgani uchun JavaScript dasturida JSON maʼlumotlarini tahlil qilishning eng oddiy usuli JavaScript ifodalarini bajarish uchun moʻljallangan oʻrnatilgan JavaScript eval() funksiyasidan foydalanishdir. Ushbu yondashuv bilan qo'shimcha parserlardan foydalanishning hojati yo'q.

Agar foydalaniladigan JSON ma'lumotlarining manbasiga ishonch bo'lmasa, eval() texnikasi tizimni zaif holga keltiradi ( Ingliz). Bunday ma'lumotlar Code Injection hujumlari uchun zararli JavaScript kodi bo'lishi mumkin ( Ingliz). Ushbu zaiflikdan foydalanib, ma'lumotlarni o'g'irlash va autentifikatsiyani soxtalashtirish mumkin. Biroq, zaiflikni qo'shimcha ma'lumotlarni tekshirish vositalari yordamida bartaraf etish mumkin. Misol uchun, eval() ni bajarishdan oldin tashqi manbadan olingan ma'lumotlarni muntazam ifodalar yordamida tekshirish mumkin. JSONni aniqlaydigan RFC JSON formatiga mos kelishini tekshirish uchun quyidagi koddan foydalanishni taklif qiladi

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

Eval() ga xavfsizroq alternativ sifatida faqat JSON maʼlumotlarini qayta ishlay oladigan parseJSON() yangi funksiyasi taklif qilingan. U ECMAScript standartining 4-versiyasida taqdim etilgan va "JSON: XMLga kam yog'li alternativ" maqolasida tasvirlangan. Hozirda u JavaScript kutubxonasi sifatida mavjud va ECMAScript ning beshinchi nashriga kiritiladi.

Oʻrnatilgan JSON

Veb-brauzerlarning so'nggi versiyalarida JSON-ni o'rnatilgan qo'llab-quvvatlash mavjud va uni eval() funktsiyasini chaqirmasdan qayta ishlashga qodir, bu esa tasvirlangan muammoga olib keladi. JSON bilan ishlash odatda bu holatda tezroq bo'ladi. Shunday qilib, 2009 yil iyun oyida quyidagi brauzerlar o'rnatilgan JSON-ni qo'llab-quvvatladi:

Kamida beshta mashhur JavaScript kutubxonasi mavjud boʻlganda inline JSON dan foydalanadi:

Oʻzaro domen soʻrovini soxtalashtirish

JSON-dan yomon foydalanish saytlarni saytlararo so'rovlarni soxtalashtirishga (CSRF yoki XSRF) qarshi himoyasiz qiladi. Teg undan foydalanadigan resurs bilan bir xil domenga tegishli bo'lmagan manbadan foydalanishga ruxsat berganligi sababli, kodni o'zboshimchalik bilan sahifa kontekstida JSON ma'lumotlari niqobi ostida bajarishga imkon beradi, bu esa parollarni buzish yoki boshqa saytga ruxsat berilgan foydalanuvchilarning boshqa maxfiy ma'lumotlari.

Agar JSON ma'lumotlari uchinchi tomon tomonidan buzilgan bo'lishi mumkin bo'lgan maxfiy ma'lumotlarni o'z ichiga olgan bo'lsa va server yagona manba siyosatiga tayansa, bu muammo bo'lib tuyuladi ( Ingliz), tashqi so'rov aniqlanganda ma'lumotlarga kirishni bloklash. Agar server so'rovning to'g'riligini aniqlasa, ma'lumotlarni faqat to'g'ri bo'lsa taqdim qilsa, bu muammo emas. Buni aniqlash uchun HTTP cookie-fayllaridan foydalanish mumkin emas. HTTP cookie-fayllaridan eksklyuziv foydalanish saytlararo so'rovlarni soxtalashtirish orqali qo'llaniladi.

JSONP va JSONPP

JSONP (JSON Padding) yoki "JSON with padding" qo'ng'iroq qilish funksiyasining nomi kiritish argumenti sifatida ko'rsatilganda JSON kengaytmasi hisoblanadi.

Texnologiya brauzerning xavfsizlik siyosati sahifa yuklangan serverdan boshqa serverlarga kirish uchun tegdan foydalanish imkonini berishiga asoslanadi.

JSONP texnologiyasidan foydalanmasdan (ya'ni faqat JSON ma'lumotlarini kodlashdan foydalanmasdan), server faqat ma'lumotlarni qaytarishi mumkin. Masalan, shunday:

("qog'oz": "A4", "hisoblash": 5)

Biroq, bu faqat ma'lumotlar va brauzerga ta'sir qila olmaydi.

JSONP texnikasidan foydalanib, qayta qo'ng'iroq qilish funksiyasining nomi qo'ng'iroq liniyasidagi (GET) uchinchi tomon serveriga uzatiladi:

Bu erda jsonp parametri parseResponse qayta qo'ng'iroq qilish funktsiyasi nomini o'z ichiga oladi.

Endi example.com xorijiy serveri quyidagi kodni qaytarishi mumkin:

ParseResponse(( "qog'oz" : "A4" , "hisoblash" : 5 ) )

Kod endi birinchi domenning javascript funksiyasini chaqiradi.

Ushbu g'oya dastlab 2005 yilda MacPython blogida taklif qilingan va hozirda Dojo Toolkit Applications, Google Toolkit Applications va zanox Web Services kabi ko'plab Web 2.0 ilovalari tomonidan qo'llaniladi. JSONPP ning S3DB veb-xizmatlarini qo'llab-quvvatlashi kabi qo'shimcha argumentlarni o'z ichiga olish uchun ushbu protokolga qo'shimcha kengaytmalar taklif qilingan.

JSONP skript teglaridan foydalanganligi sababli, qo'ng'iroqlar dunyo uchun ochiqdir. Shu sababli, JSONP nozik ma'lumotlarni saqlash uchun mos bo'lmasligi mumkin.

Masofaviy saytlardan skript teglarini yoqish ularga saytdagi istalgan kontentni uzatish imkonini beradi. Agar masofaviy saytda Javascript in'ektsiyasiga ruxsat beruvchi zaifliklar bo'lsa, ular asl saytga ham ta'sir qilishi mumkin.

JSONPP (toʻldiruvchi parametrli JSON) Toʻldirilgan parametrli JSON - JSONP gʻoyasini ishlab chiqish

JSONPP manba URL manzilini, JSON maʼlumotlarini qayta ishlovchi funksiya nomini, maʼlumotlarni qabul qilgandan keyin baholash qatorini va maʼlumotlarni qayta ishlashni tugatgandan soʻng baholash uchun qatorni oʻz ichiga oladi:

JSON_call(SRC, JSONP, JSONPP, ONLOAD) ;

oxir-oqibat ortiga aylanadi

Javob = JSONP(SRC) ( baholash(JSONPP(ans) ); baholash(YUKLASH) ; )

Umuman olganda, parametrlar soni JSONPP g'oyasining o'zi uchun muhim emas. JSONPP bo'lishi uchun SRC, JSONP, JSONPP (va ularni server tomonida, keyin esa mijoz tomonida qayta ishlash) yetarli.

Keling, S3DB xizmati bilan ishlash misolini ko'rib chiqaylik.

Funktsiya s3db_jsonpp_call(src, next_eval) ( var call = "call_" + Math .random () .toString () .replace (/\./g, "" ) ; var headID = document.getElementsByTagName ("head" ) [ 0 ] ; var script = document.createElement (“skript” ); script.id = call; script.type = “text/javascript” ; // to‘ldirilgan, parametrlangan json src = src+ "&format=json&jsonp=s3db_jsonpp&jsonpp=" + next_eval+ yordamida "&onload=remove_element_by_id("" + script.id + "")" ; script.src = src; headID.appendChild (skript) ; // javobni olish ) funksiya s3db_jsonpp(ans, jsonpp) ( eval(jsonpp) ; ans qaytarish ; ) funksiyasi remove_element_by_id(id) ( var e = document.getElementById (id) ; e.parentNode .removeChild (e) ; false qaytar ; )

Misolda, s3db_jsonpp_call() funksiyasi bosh qismdagi DOMda skript elementini yaratadi, uning src belgisi JSONPP chaqiruviga mos keladi.

Serverdan javob olgandan so'ng, s3db_jsonpp() chaqiriladi - u JSONP qoidalariga muvofiq bo'lishi kerak bo'lganidek, qo'ng'iroq parametrlarida uzatiladi.

Ichida s3db_jsonpp() eval(jsonpp) yonadi va ans qiymatini qaytaradi.

Eval(onload) ni chaqirish, boshda yaratilgan skript identifikatori bilan remove_element_by_id() ning bajarilishiga va oxir-oqibat uni o'chirishga olib keladi, chunki u baribir ishlatilmaydi, chunki misoldagi identifikatorning boshida tasodifiy yaratilgan. s3db_jsonpp_call() funktsiyasi. Bu qo'ng'iroq server javobida.

Ob'ekt havolalari

JSON standarti ob'ekt havolalarini qo'llab-quvvatlamaydi, ammo Dojo Toolkit standart JSON qo'shimcha konventsiyalar yordamida bunday havolalarni qanday qo'llab-quvvatlashi mumkinligini ko'rsatadi. Xususan, dojox.json.ref moduli havolalarning bir nechta shakllarini qo‘llab-quvvatlaydi, jumladan aylanma, ko‘p, hujjatlararo va dangasa havolalar.

Shuningdek qarang Eslatmalar
  • YAML Belgilash tili emas (YAML™) Versiya 1.2 (inglizcha). - Ishchi loyiha 2008-05-11.(ishlab bo'lmaydigan havola - hikoya) 2009-yil 24-sentabrda olindi.
  • . RedHanded (2005 yil 7 aprel). 2012-yil 25-sentabrda olindi.
  • Json.Com JSON sxemasi taklifi (kirish mumkin bo'lmagan havola - hikoya)
  • RFC 4627
  • JSON: XML-ga yog'siz alternativ. Arxivlangan
  • json2.js (inglizcha). 2012-yil 12-fevralda asl nusxadan arxivlangan. Olingan. 2009-yil 24-sentabr.
  • O'rnatilgan JSON-dan foydalanish.
  • IE8-ga o'rnatilgan JSON. 2012-yil 12-fevralda asl nusxadan arxivlangan.
  • Opera Presto 2.5 (ingliz) da qo'llab-quvvatlanadigan veb-spetsifikatsiyalar (2010 yil 10 mart). 2012-yil 12-fevralda asl nusxadan arxivlangan. Olingan. 2010-yil 29-mart.
  • JSON ob'ektining ES 3.1 amalga oshirilishi.
  • Chipta №4429lang=en . 2012-yil 12-fevralda asl nusxadan arxivlangan.
  • Chipta №4429 (2009 yil 22-may). 2012-yil 12-fevralda asl nusxadan arxivlangan. Olingan 2009-yil 3-iyul.
  • Chipta №8111lang=en . 2012-yil 12-fevralda asl nusxadan arxivlangan.
  • MooTools Core va boshqalar 1.3.1. 2012-yil 12-fevralda asl nusxadan arxivlangan.
  • YUI 2: JSON yordam dasturi (2009 yil 1 sentyabr). 2012-yil 12-fevralda asl nusxadan arxivlangan. Olingan. 2009-yil 22-oktabr.
  • JSON-ni o'rganing (2010 yil 7 aprel). 2012-yil 12-fevralda asl nusxadan arxivlangan. 2010-yil 7-aprelda olingan.
  • Jeremi Grossman GMail yordamida veb-ilovalarga qarshi ilg'or hujum usullari. WhiteHat xavfsizligi. 2012-yil 12-fevralda asl nusxadan arxivlangan. Olingan. 2009-yil 23-sentabr.
  • __future__ importdan * »Remote JSON - JSONP. Bob.pythonmac.org. 2012-yil 12-fevralda asl nusxadan arxivlangan. Olingan 2008-yil 8-sentabr.
  • Almeyda, Jonas (2008 yil 11 iyun). "JSON, JSONP, JSONPP? "(S3DB). Olingan 2009-04-26.
  • RIAspot Cross Site XHR uchun JSON P .(kirish mumkin bo'lmagan havola - hikoya)
  • Dojo'da JSON havolasi. 2012-yil 12-fevralda asl nusxadan arxivlangan.
  • Havolalar
    • Rus tilida rasmiy format bosh sahifa
    • json.js, json2.js JavaScript-da JSON ma'lumotlari bilan ishlash uchun Duglas Krokford tomonidan ishlab chiqilgan kutubxona. Ob'ektni toJSONString usuli bilan kengaytiradi, keyin har qanday ob'ektda mavjud bo'ladi va uni JSON formatidagi satrga aylantiradi.
    • json-rpc.org (ingliz)
    Hujjatlarni belgilash tillariOfis hujjatlari

    JSON yoki JavaScript Object Notation - bu kalit-qiymat juftliklari va tartiblangan ro'yxatlar printsipi asosida tuzilgan ma'lumotlarning tuzilmagan matnli tasvirini amalga oshiradigan format. JSON JavaScript-dan kelib chiqqan bo'lsa-da, u ko'pchilik tillarda mahalliy yoki maxsus kutubxonalar yordamida qo'llab-quvvatlanadi. Odatda Json veb-mijozlar va veb-server o'rtasida ma'lumot almashish uchun ishlatiladi.

    So'nggi 15 yil ichida JSON rasmiy ma'lumotlar almashinuvi standartiga aylandi va Internetda deyarli hamma joyda qo'llaniladi. Bugungi kunda u deyarli barcha veb-serverlar tomonidan qo'llaniladi. Ushbu mashhurlikning yana bir sababi ko'plab ma'lumotlar bazalarining JSON-ni qo'llab-quvvatlaganligi edi. PostgreSQL va MySQL kabi zamonaviy relyatsion ma'lumotlar bazalari endi JSON-da ma'lumotlarni saqlash va eksport qilishni qo'llab-quvvatlaydi. MongoDB va Neo4j kabi ma'lumotlar bazalari ham JSON-ni qo'llab-quvvatlaydi, ammo MongoDB JSON-ning biroz o'zgartirilgan versiyasidan foydalanadi. Ushbu maqolada biz JSON nima ekanligini, uning XMLga nisbatan afzalliklari, kamchiliklari va undan qachon foydalanish yaxshiroq ekanligini ko‘rib chiqamiz.

    JSON formati nima uchun kerakligini va u qanday ishlashini tushunish uchun sizga amaliyot kerak. Avval ushbu misolni ko'rib chiqamiz:

    {
    "firstName": "Jonatan",
    "familiya": "Freeman",
    "loginCount": 4,
    "isWriter": rost,
    “worksWith”: [“Spantree Technology Group”, “InfoWorld”],
    "uy hayvonlari": [
    {
    "ism": "Lilly",
    "turi": "Rakun"
    }
    ]
    }

    Shu doirada biz insonning ayrim sifatlarini aniq belgilab oldik. Birinchidan, biz ism, familiya, tizimdagi loginlar sonini, bu shaxs yozuvchi yoki yo'qligini, u ishlaydigan kompaniyalar ro'yxatini va uy hayvonlari ro'yxatini aniqladik. Bu yoki shunga o'xshash tuzilmani serverdan veb-brauzer yoki mobil ilovaga o'tkazish mumkin, keyinchalik u ushbu ma'lumotlar bilan kerakli narsani qila oladi, masalan, uni ko'rsatishi yoki saqlashi mumkin.

    JSON - bu qiymat turlarining minimal soniga ega bo'lgan umumiy ma'lumotlar formati - satrlar, raqamlar, mantiqiy (bir yoki nol), ro'yxatlar, ob'ektlar va null. JSON JavaScript-ning quyi to'plami bo'lsa ham, eng mashhur dasturlash tillarida bunday ma'lumotlar mavjud bo'lib, JSON turli tillarda yozilgan dasturlar o'rtasida ma'lumotlarni uzatish uchun yaxshi nomzod qiladi.

    Nima uchun JSON dan foydalanish kerak?

    JSONning foydaliligi va ahamiyatini tushunish uchun biz Internetdagi interaktivlik tarixi haqida bir oz tushunishimiz kerak. 2000-yillarning boshlarida veb-saytlarning interaktivligi o'zgara boshladi. O'sha paytda brauzer faqat ma'lumotni ko'rsatish uchun xizmat qilgan va veb-server kontentni namoyish qilish uchun barcha ishlarni bajargan. Foydalanuvchi brauzerdagi tugmani bosganida, serverga so'rov yuborildi, u erda HTML sahifasi yig'ilib yuborildi, ko'rsatishga tayyor. Bu mexanizm sekin va samarasiz edi. Bu brauzerdan sahifadagi hamma narsani, hatto maʼlumotlarning kichik qismi oʻzgargan boʻlsa ham, qayta koʻrsatishni talab qildi.

    O'sha paytda transferlar o'tkazilgan ma'lumotlar miqdoridan kelib chiqqan holda haq olindi, shuning uchun ishlab chiquvchilar butun sahifani qayta yuklash juda qimmat ekanligini tushunishdi va foydalanuvchi interfeysini yaxshilash uchun yangi texnologiyalarni ko'rib chiqdilar. Keyin Internet Explorer 5-ga qo'shilgan fonda veb-so'rovlarni amalga oshirish qobiliyati ma'lumotlarni ko'rsatish uchun bosqichma-bosqich yuklash uchun juda qulay yondashuv bo'lib chiqdi. Sahifani qayta yuklash o'rniga, tugmani bosish shunchaki fonda ishlaydigan veb-so'rovni chiqaradi. Kontent yuklanishi bilanoq yangilanadi. Uni brauzerlar uchun universal dasturlash tili JavaScript yordamida boshqarish mumkin.

    Dastlab, ma'lumotlar XML formatida uzatilgan, ammo JavaScript-da foydalanish qiyin edi. JavaScript-da tilda ma'lumotlarni aks ettirish uchun foydalanilgan ob'ektlar allaqachon mavjud edi, shuning uchun Duglas Krokford JS ob'ekti sintaksisini oldi va uni JSON deb nomlangan yangi ma'lumot almashish formati uchun spetsifikatsiya sifatida ishlatdi. Ushbu formatni JavaScript brauzerida o'qish va tahlil qilish ancha oson edi. Tez orada ishlab chiquvchilar XML o'rniga JSON dan foydalanishni boshladilar.

    Hozirgi vaqtda tezkor JSON ma'lumotlar almashinuvi server va mijoz, mobil ilovalar va hatto ichki tizim xizmatlari o'rtasida ma'lumotlarni uzatishning de-fakto standartidir.

    JSON va XML

    Yuqorida aytib o'tganimdek, JSONga asosiy muqobil XML edi va shunday bo'ladi. Biroq, XML yangi tizimlarda kamroq tarqalgan. Va buning sababini tushunish juda oson. Quyida yuqorida ko'rgan ma'lumotlarni Json-da XML orqali yozishga misol keltirilgan:


    Jonatan
    Freeman
    4
    rost

    Spantree Technology Group
    InfoWorld

    Lilly
    Rakun


    Ma'lumotlarni yozish uchun ikki baravar ko'p joy egallagan kodning ortiqcha bo'lishiga qo'shimcha ravishda, XML ma'lumotlar strukturasini tahlil qilishda ba'zi noaniqliklarni ham keltirib chiqaradi. XML-ni JavaScript ob'ektiga aylantirish o'nlab va yuzlab qator kodlarni olishi mumkin va har bir tahlil qilinadigan ob'ekt uchun nozik sozlashni talab qiladi. JSON-ni JavaScript ob'ektiga aylantirish bir qatorda amalga oshiriladi va tahlil qilinayotgan ob'ekt haqida oldindan bilim talab qilmaydi.

    JSON cheklovlari

    JSON nisbatan siqilgan va moslashuvchan ma'lumotlar formati bo'lsa-da, ko'plab dasturlash tillarida ishlash oson, lekin uning kamchiliklari bor. Bu erda ba'zi cheklovlar mavjud:

    • Tuzilmasi yo'q. Bir tomondan, bu ma'lumotlarni o'zingiz xohlagan tarzda taqdim etish uchun to'liq moslashuvchanligingizni anglatadi. Boshqa tomondan, tuzilmagan ma'lumotlarni osongina saqlashingiz mumkin.
    • Faqat bitta turdagi raqamlar. IEEE-754 suzuvchi nuqta va ikki tomonlama aniqlik formati qo'llab-quvvatlanadi. Bu juda ko'p, lekin siz boshqa tillarda mavjud bo'lgan turli xil raqamli turlardan foydalana olmaysiz.
    • Sana turi yo'q. ishlab chiquvchilar formatlashda nomuvofiqliklarga olib kelishi mumkin bo'lgan sanalarning string tasvirlaridan foydalanishlari kerak. Yoki sana sifatida Unix davrining boshidan (1970 yil 1 yanvar) o'tgan millisekundlar sonini ishlating.
    • Sharhlar yo'q - to'g'ridan-to'g'ri kodda talab qilinadigan maydonlarga izoh qo'sha olmaysiz.
    • Verbose - JSON XML ga qaraganda kamroq batafsil ma'lumotga ega bo'lsa-da, u eng qisqacha ma'lumot almashish formati emas. Yuqori darajali yoki ixtisoslashtirilgan xizmatlar uchun siz samaraliroq formatlardan foydalanishni xohlaysiz.
    JSON-dan qachon foydalanish kerak?

    Agar siz brauzer yoki mahalliy mobil ilova bilan o'zaro ta'sir qiluvchi dasturiy ta'minotni ishlab chiqayotgan bo'lsangiz, JSON-dan foydalanganingiz ma'qul. XML dan foydalanish eskirgan. Serverlar o'rtasidagi aloqa uchun JSON unchalik samarali bo'lmasligi mumkin va Apache Avro yoki Apache Thriftga o'xshash serializatsiya ramkasidan foydalanish yaxshiroqdir. Bu erda ham JSON yomon tanlov emas va sizga kerak bo'lgan hamma narsani berishi mumkin. Ammo nimani tanlash kerakligi haqida aniq javob yo'q.

    Agar siz MySQL ma'lumotlar bazalaridan foydalansangiz, dasturingiz asosan ma'lumotlar bazasida nima qilinayotganiga bog'liq bo'ladi. JSON-ni qo'llab-quvvatlaydigan relyatsion ma'lumotlar bazalarida iloji boricha kamroq foydalanish yaxshi amaliyot hisoblanadi. Relyatsion ma'lumotlar bazalari ma'lum bir sxemaga ega ma'lumotlar uchun mo'ljallangan. Garchi ularning aksariyati hozirda JSON ma'lumotlar formatini qo'llab-quvvatlasa ham, u bilan ishlash unumdorligi sezilarli darajada past bo'ladi.

    xulosalar

    JSON - bu asosan veb-serverlar va brauzerlar yoki mobil ilovalar o'rtasida ma'lumotlarni yuborishga qaratilgan ma'lumotlar formati. Format oddiy dizayn va moslashuvchanlikka ega, uni o'qish va tushunish oson va ko'pchilik dasturlash tillarida bunday ma'lumotlar bilan ishlash oson. Qattiq sxemaning yo'qligi formatda moslashuvchanlikni ta'minlaydi, ammo bu moslashuvchanlik ba'zan ma'lumotlarni o'qish va tushunishni qiyinlashtirishi mumkin.

    Siz JSON bilan Scala yoki Elm kabi kuchli terilgan tillarda ishlashda qiynalishingiz mumkin, ammo formatning keng qoʻllanilishi hatto murakkab muammolarni hal qilishda yordam beradigan yordamchi dasturlar va kutubxonalar mavjudligini anglatadi. Endi siz json nima ekanligini va undan qanday foydalanishni bilasiz.

    JSON nima va u nima qila oladi? Ushbu maqolada siz ma'lumotlar bilan oson ishlash uchun JSON-dan qanday foydalanishni o'rganasiz. PHP va JavaScript yordamida JSON bilan qanday ishlashni ham ko'rib chiqamiz.

    Agar siz umuman veb-saytlar yoki veb-ilovalarni ishlab chiqqan bo'lsangiz, JSON haqida hech bo'lmaganda eshitgan bo'lishingiz mumkin. Lekin JSON aniq nimani anglatadi? Ushbu ma'lumotlar formati nima qilishi mumkin va undan qanday foydalanish mumkin?

    Ushbu maqolada json formati bilan ishlash asoslarini bilib olamiz. Biz quyidagi mavzularni kuzatib boramiz:

    • JSON formati nima?
    • JSON satrlarini qanday yaratish mumkin?
    • JSON ma'lumotlariga oddiy misol
    • JSONni XML bilan solishtirish

    Boshlaymiz!

    JSON formati nima?

    JSON - tuzilgan ma'lumotlarni saqlash va uzatishning oddiy, matnga asoslangan usuli. Oddiy sintaksisdan foydalanib, siz matndan boshqa hech narsa ishlatmasdan oddiy raqamlar va satrlarni, shuningdek, massivlar va ob'ektlarni osongina saqlashingiz mumkin. Shuningdek, siz murakkab ma'lumotlar tuzilmalarini yaratishga imkon beruvchi ob'ektlar va massivlarni bog'lashingiz mumkin.

    JSON satri yaratilgandan so'ng uni istalgan dastur yoki kompyuterga osongina yuborish mumkin, chunki u shunchaki matn.

    JSON juda ko'p afzalliklarga ega:

    • Bu ixcham
    • U odamlar tomonidan o'qilishi mumkin va kompyuterlar tomonidan o'qilishi oson
    • Uni dasturiy ta'minot formatlariga osongina aylantirish mumkin: raqamli qiymatlar, satrlar, mantiqiy format, null qiymat, massivlar va assotsiativ massivlar.
    • Deyarli barcha dasturlash tillarida json maʼlumotlar formatini oʻqish va yaratish imkonini beruvchi funksiyalar mavjud.

    JSON qisqartmasi JavaScript Object Notation degan ma'noni anglatadi. Yuqorida aytib o'tilganidek, bu format boshqa dasturlash tillaridagi assotsiativ massivlarga o'xshash ob'ektlarni yaratishga asoslangan.

    JSON qanday maqsadlarda ishlatiladi?

    Eng muhimi, json JavaScript va server tomoni (php) o'rtasida ma'lumot almashish uchun ishlatiladi. Boshqacha qilib aytganda, ajax texnologiyasi uchun. Bu bir nechta o'zgaruvchilar yoki butun ma'lumotlar massivlarini o'tkazayotganda juda qulaydir.

    Bu misolda qanday ko'rinadi:

  • Foydalanuvchi eskiz rasmini bosadi
  • JavaScript ushbu hodisani qayta ishlaydi va rasm identifikatoridan o'tib, PHP skriptiga ajax so'rovini yuboradi.
  • Serverda php ma'lumotlar bazasidan rasm tavsifi, rasm nomi, katta rasmning manzili va boshqa ma'lumotlarni oladi. Uni qabul qilib, uni JSON formatiga o'zgartiradi va foydalanuvchi sahifasiga qaytarib yuboradi.
  • JavaScript javobni JSON ko'rinishida oladi, ma'lumotlarni qayta ishlaydi, html kodini yaratadi va tavsif va boshqa ma'lumotlar bilan kattalashtirilgan tasvirni ko'rsatadi.
  • Brauzerda sahifani qayta yuklamasdan tasvir shunday kattalashtiriladi. Bu qisman ma'lumotlarni olishimiz yoki serverga oz miqdordagi ma'lumotni o'tkazishimiz kerak bo'lganda juda qulaydir.

    Hammaning sevimli jQuery-da getJSON() va parseJSON() funksiyalari mavjud bo'lib, ular ajax so'rovlari orqali format bilan ishlashga yordam beradi.

    JSON satrlarini qanday yaratish mumkin?


    Quyida JSON satrlarini yaratishning asosiy qoidalari keltirilgan:

    • JSON satri ham qiymatlar massivini, ham ob'ektni (nom/qiymat juftliklari bo'lgan assotsiativ massiv) o'z ichiga oladi.
    • Massiv kvadrat qavslar ichiga [ va ] o'ralgan bo'lishi kerak va koma bilan ajratilgan qiymatlar ro'yxatini o'z ichiga olishi mumkin.
    • Ob'ektlar jingalak qo'llar ( va ) yordamida o'ralgan, shuningdek, koma bilan ajratilgan nom/qiymat juftlarini o'z ichiga oladi.
    • Nom/qiymat juftliklari maydon nomidan (ikki tirnoq ichida) keyin ikki nuqta (:) va undan keyin maydon qiymatidan iborat.
    • Massiv yoki ob'ektdagi qiymatlar quyidagilar bo'lishi mumkin:
      • Raqamli (butun yoki nuqtali kasr)
      • Satrlar (ikki tirnoq ichida)
      • Mantiqiy (to'g'ri yoki noto'g'ri)
      • Boshqa massivlar (kvadrat qavs ichida [ va ])
      • Boshqa narsalar (jingalak qo'llarga o'ralgan ( va ))
      • Null qiymat

    Muhim! Qiymatlarda qoʻsh qoʻshtirnoqdan foydalansangiz, ularni teskari chiziq bilan qoching: \". Boshqa dasturlash tillarida boʻlgani kabi, olti burchakli kodlangan belgilardan ham foydalanishingiz mumkin.

    JSON ma'lumotlariga oddiy misol

    Quyidagi misol JSON formatidan foydalangan holda onlayn-do'konning "savatida" ma'lumotlarni qanday saqlashingiz mumkinligini ko'rsatadi:

    ("orderID": 12345, "shopperName": "Jon Smit", "shopperEmail": " [elektron pochta himoyalangan]", "contents": [ ( "mahsulot identifikatori": 34, "mahsulot nomi": "SuperWidget", "miqdor": 1 ), ( "mahsulot identifikatori": 56, "mahsulot nomi": "WonderWidget", "miqdor": 3 ) ], "orderCompleted": true )

    Keling, ushbu ma'lumotlarni qismlarga bo'lib ajratamiz:

  • Boshida va oxirida biz jingalak qo'llardan foydalanamiz ( va ) bu ob'ekt ekanligini aniq ko'rsatish uchun.
  • Ob'ekt ichida bizda bir nechta nom/qiymat juftlari mavjud:
  • "orderID": 12345 - orderId deb nomlangan maydon va 12345 qiymati
  • "shopperName": "Jon Smit" - shopperName va qiymati deb nomlangan maydon Jon Smit
  • "shopperEmail": "johnsmith@ example.com" - oldingi maydonga o'xshash, xaridorning elektron pochtasi shu erda saqlanadi.
  • "contents": [ ... ] - qiymati massiv bo'lgan kontent deb nomlangan maydon.
  • "orderCompleted": true - qiymati rost bo'lgan orderCompleted nomli maydon
  • Tarkiblar qatorida bizda savat tarkibini ko'rsatadigan ikkita ob'ekt mavjud. Har bir mahsulot obyekti uchta xususiyatga ega: mahsulot identifikatori, mahsulot nomi, miqdor.
  • Nihoyat, JSON JavaScript-dagi ob'ektlar bilan bir xil bo'lgani uchun siz ushbu misolni osongina olishingiz va undan JavaScript ob'ektini yaratishingiz mumkin:

    var cart = ("orderID": 12345, "shopperName": "Jon Smit", "shopperEmail": " [elektron pochta himoyalangan]", "contents": [ ( "mahsulot identifikatori": 34, "mahsulot nomi": "SuperWidget", "miqdor": 1 ), ( "mahsulot identifikatori": 56, "mahsulot nomi": "WonderWidget", "miqdor": 3 ) ], "orderCompleted": true );

    JSONni XML bilan solishtirish

    Aksariyat hollarda siz JSON-ni XML-ga muqobil deb hisoblaysiz - hech bo'lmaganda veb-ilovalar ichida. Ajax kontseptsiyasi dastlab server va brauzer o'rtasida ma'lumot almashish uchun XML dan foydalanadi, ammo so'nggi yillarda JSON ajax ma'lumotlarini uzatish uchun yanada ommalashdi.

    XML ko'plab ilovalar tomonidan qo'llaniladigan sinab ko'rilgan va sinovdan o'tgan texnologiya bo'lsa-da, JSON formatining afzalliklari shundaki, u yanada ixcham va yozish va o'qish osonroq.

    Mana yuqoridagi JSON misoli, faqat XML formatida qayta yozilgan:

    orderID 12345 xaridorning ismi Jon Smit xaridori Email [elektron pochta himoyalangan] kontent mahsulotID 34 mahsulot nomi SuperVidjet miqdori 1 ta mahsulotID 56 mahsulot nomi WonderWidget miqdori 3 buyurtma Tugallangan rost

    Ko'rib turganingizdek, u JSON dan bir necha baravar uzunroq. Aslida, bu misol 1128 belgidan iborat, JSON versiyasi esa atigi 323 belgidan iborat. XML versiyasini o'qish ham qiyinroq.

    Tabiiyki, bitta misol bilan hukm qilish mumkin emas, lekin kichik hajmdagi ma'lumotlar ham XML formatiga qaraganda JSON formatida kamroq joy egallaydi.

    PHP va JS orqali JSON bilan qanday ishlash mumkin?

    Endi biz eng qiziqarli qismga - JSON formatining amaliy tomoniga keldik. Birinchidan, keling, JavaScript-ni hurmat qilaylik, keyin PHP orqali JSONni qanday boshqarish mumkinligini ko'rib chiqamiz.

    JavaScript yordamida JSON formatini yaratish va o'qish


    JSON formati oddiy bo'lsa ham, veb-ilovalarni ishlab chiqishda qo'lda yozish qiyin. Bundan tashqari, siz tez-tez JSON satrlarini o'zgaruvchilarga aylantirishingiz va keyin ularni kodingizda ishlatishingiz kerak.

    Yaxshiyamki, ko'plab dasturlash tillari JSON satrlari bilan ishlash uchun vositalarni taqdim etadi. Qaysi asosiy g'oya:

    JSON satrlarini yaratish uchun siz ba'zi qiymatlarni o'z ichiga olgan o'zgaruvchilardan boshlaysiz, so'ngra ularni ma'lumotlarni JSON qatoriga aylantiruvchi funksiya orqali o'tkazasiz.

    JSON satrlarini o'qish, siz ma'lum ma'lumotlarni o'z ichiga olgan JSON qatoridan boshlaysiz, qatorni ma'lumotlarni o'z ichiga olgan o'zgaruvchilar yaratadigan funksiya orqali o'tkazasiz.

    Keling, bu JavaScript-da qanday amalga oshirilishini ko'rib chiqaylik.

    JavaScript o'zgaruvchisidan JSON qatorini yaratish

    JavaScript-da o'rnatilgan JSON.stringify() usuli mavjud, u javascript o'zgaruvchisini oladi va o'zgaruvchining mazmunini ifodalovchi json qatorini qaytaradi. Masalan, avval yaratilgan obyektdan foydalanamiz va uni JSON satriga aylantiramiz.

    var cart = ("orderID": 12345, "shopperName": "Jon Smit", "shopperEmail": " [elektron pochta himoyalangan]", "contents": [ ( "mahsulot identifikatori": 34, "mahsulot nomi": "SuperWidget", "miqdor": 1 ), ( "mahsulot identifikatori": 56, "mahsulot nomi": "WonderWidget", "miqdor": 3 ) ], "orderCompleted": true ); alert (JSON.stringify(cart));

    Bu ekranda paydo bo'ladigan narsa:

    ("orderID":12345,"shopperName":"Jon Smit","shopperEmail":" [elektron pochta himoyalangan]", "contents":[("productID":34,"productName":"SuperWidget","quantity":1), ("productID":56,"productName":"WonderWidget","miqdor":3) ], "buyurtma tugallandi": rost)

    E'tibor bering, JSON.stringify() JSON satrlarini bo'sh joysiz chiqaradi. O'qish qiyin, lekin u ixchamroq, bu ma'lumotlarni yuborishda muhim ahamiyatga ega.

    JSON qatoridan JavaScript oʻzgaruvchisini yaratish

    JSON satrlarini tahlil qilishning bir necha usullari mavjud, eng maqbuli va xavfsizi JSON.parse() usulidan foydalanishdir. U JSON satrini oladi va JSON ma'lumotlarini o'z ichiga olgan JavaScript ob'ektini yoki massivni qaytaradi. Mana bir misol:

    var jsonString = " \ ( \ "orderID": 12345, \ "shopperName": "Jon Smit", \ "shopperEmail": " [elektron pochta himoyalangan]", \ "contents": [ \ ( \ "mahsulot identifikatori": 34, \ "mahsulot nomi": "SuperWidget", \ "miqdori": 1 \), \ ( \ "mahsulot identifikatori": 56, \ "mahsulot nomi": " WonderWidget", \"miqdori": 3\ ) \ ], \"orderCompleted": true \ ) \"; var cart = JSON.parse(jsonString); ogohlantirish (cart.shopperEmail); ogohlantirish (cart.contents.productName);

    Bu erda biz jsonString o'zgaruvchisini yaratdik, unda avval keltirilgan misollardan JSON satri mavjud. Keyin savat o'zgaruvchisida saqlangan JSON ma'lumotlarini o'z ichiga olgan ob'ektni yaratish uchun ushbu qatorni JSON.parse() orqali o'tkazdik. Nihoyat, biz ma'lumotlar mavjudligini tekshiramiz va ogohlantirish modal oynasi yordamida ba'zi ma'lumotlarni ko'rsatamiz.

    Quyidagi ma'lumotlar ko'rsatiladi:

    Haqiqiy veb-ilovada sizning JavaScript kodingiz serverdan javob sifatida JSON satrini olishi kerak (AJAX so'rovini yuborganingizdan so'ng), so'ngra qatorni tahlil qiling va arava tarkibini foydalanuvchiga ko'rsating.

    PHP yordamida JSON formatini yaratish va o'qish

    PHP, JavaScript kabi, o'zgaruvchilarni JSON formatiga aylantirish imkonini beruvchi funktsiyalarga ega va aksincha. Keling, ularga qaraylik.

    PHP o'zgaruvchisidan JSON qatorini yaratish

    Json_encode() PHP o'zgaruvchisini oladi va o'zgaruvchining ma'lumotlarini ifodalovchi JSON qatorini qaytaradi. Mana PHP da yozilgan “arava” misolimiz:

    Ushbu kod JavaScript misoli bilan aynan bir xil natijani beradi - o'zgaruvchilar tarkibini ifodalovchi haqiqiy JSON qatori:

    ("orderID":12345,"shopperName":"Jon Smit","shopperEmail":" [elektron pochta himoyalangan]","contents":[("productID":34,"productName":"SuperWidget","quantity":1),("productID":56,"productName":"WonderWidget","miqdor":3) ],"orderCompleted":true)

    Aslida, PHP skriptingiz AJAX so'roviga javob sifatida JSON qatorini yuborishi kerak, bunda JavaScript qatorni o'zgaruvchilarga aylantirish uchun JSON.parse() dan foydalanadi.

    json_encode() funksiyasida siz ba'zi belgilarni hexga aylantirish imkonini beruvchi qo'shimcha parametrlarni belgilashingiz mumkin.

    JSON satridan PHP o'zgaruvchisini yaratish

    Yuqoridagiga o'xshash json_decode() funksiyasi mavjud bo'lib, u sizga JSON satrlarini dekodlash va tarkibni o'zgaruvchilarga joylashtirish imkonini beradi.

    JavaScript-da bo'lgani kabi, bu kod quyidagilarni chiqaradi:

    [elektron pochta himoyalangan] WonderWidget

    Odatiy bo'lib, json_decode() JSON obyektlarini PHP obyektlari sifatida qaytaradi. Oddiy sintaksisga o'xshab, biz ob'ektning xususiyatlariga kirish uchun -> dan foydalanamiz.

    Agar siz keyinchalik ma'lumotlarni assotsiativ massiv sifatida ishlatmoqchi bo'lsangiz, json_decode() funktsiyasiga to'g'ri ikkinchi parametrni o'tkazing. Mana bir misol:

    $cart = json_decode ($jsonString, rost); echo $cart["shopperEmail"] . "
    "; echo $cart["contents"]["productName"] ."
    ";

    Bu bir xil natijani beradi:

    [elektron pochta himoyalangan] WonderWidget

    Katta sonlar va rekursiyalarni qayta ishlashni aniqlash uchun json_decode() funksiyasiga qoʻshimcha argumentlarni ham yuborishingiz mumkin.

    JSON formati haqida xulosa

    Agar siz Ajax texnologiyasidan foydalangan holda veb-ilovani yaratmoqchi bo'lsangiz, server va brauzer o'rtasida ma'lumot almashish uchun JSON formatidan foydalanasiz.


    Albatta siz JSON haqida eshitgansiz. Bu nima? U nima qilishi mumkin va undan qanday foydalanish mumkin?

    Ushbu qo'llanmada biz JSON asoslarini ko'rib chiqamiz va quyidagi fikrlarni yoritamiz:

    • JSON nima?
    • JSON nima uchun ishlatiladi?
    • JSON qatorini qanday yaratish mumkin?
    • JSON qatoriga oddiy misol.
    • Keling, JSON va XMLni taqqoslaylik.
    • JavaScript va PHP da JSON bilan qanday ishlash mumkin?
    JSON nima?

    JSON - tuzilgan ma'lumotlarni saqlash va uzatishning oddiy, matnga asoslangan usuli. Oddiy sintaksis yordamida siz bitta raqamdan tortib satrlar, massivlar va ob'ektlargacha bo'lgan hamma narsani oddiy matnda osongina saqlashingiz mumkin. Bundan tashqari, murakkab ma'lumotlar tuzilmalarini yaratish uchun massivlar va ob'ektlarni bir-biriga bog'lashingiz mumkin.

    JSON satri yaratilgandan keyin uni boshqa ilovaga yoki tarmoqdagi boshqa joyga yuborish oson, chunki u oddiy matn.

    JSON quyidagi afzalliklarga ega:

    • Bu ixcham.
    • Uning jumlalarini ham odamlar, ham kompyuterlar o'qish va tuzish oson.
    • Ko'pgina dasturlash tillari (raqamlar, satrlar, mantiqiy qiymatlar, massivlar va boshqalar) uchun osongina ma'lumotlar strukturasiga aylantirilishi mumkin.
    • Ko'pgina dasturlash tillarida JSON tuzilmalarini o'qish va yaratish uchun funktsiyalar va kutubxonalar mavjud.

    JSON nomi JavaScript Object Notation degan ma'noni anglatadi. Nomidan ko'rinib turibdiki, u ob'ektlarni (boshqa tillarda assotsiativ massivlar yaratish kabi) va massivlarni aniqlash usuliga asoslangan.

    JSON nima uchun ishlatiladi?

    JSON-dan eng keng tarqalgan foydalanish serverdan brauzerga ma'lumotlarni yuborishdir. Odatda, JSON ma'lumotlari AJAX yordamida yetkaziladi, bu brauzer va serverga sahifani qayta yuklamasdan muloqot qilish imkonini beradi.

  • Foydalanuvchi onlayn-do'kondagi mahsulot eskizini bosadi.
  • Brauzerda ishlaydigan JavaScript tanlangan mahsulot identifikatorini o'tkazib, serverda ishlaydigan PHP skriptiga AJAX so'rovini yaratadi.
  • PHP skripti ma'lumotlar bazasidan mahsulot nomi, tavsifi, narxi va boshqa ma'lumotlarni oladi. Keyin u ma'lumotlardan JSON qatorini tuzadi va uni brauzerga yuboradi.
  • Brauzerda ishlaydigan JavaScript JSON qatorini oladi, uni dekodlaydi va foydalanuvchi uchun sahifadagi mahsulot ma'lumotlarini ko'rsatadi.
  • GET yoki POST soʻrovlariga parametr sifatida JSON qatorini oʻtkazish orqali brauzerdan serverga maʼlumotlarni yuborish uchun JSON-dan ham foydalanishingiz mumkin. Ammo bu usul kamroq tarqalgan, chunki AJAX so'rovlari orqali ma'lumotlarni uzatishni soddalashtirish mumkin. Misol uchun, mahsulot identifikatori URL manziliga GET so'rovining bir qismi sifatida kiritilishi mumkin.

    JQuery kutubxonasida getJSON() va parseJSON() kabi bir necha usullar mavjud bo'lib, ular AJAX so'rovlari orqali JSON yordamida ma'lumotlarni olishni osonlashtiradi.

    JSON qatorini qanday yaratish mumkin?

    JSON satrini yaratish uchun bir nechta asosiy qoidalar mavjud:

    • JSON qatori qiymatlar massivini yoki ob'ektni (ism/qiymat juftlarining assotsiativ massivi) o'z ichiga oladi.
    • Massiv kvadrat qavs ([ va ]) ichiga olinadi va vergul bilan ajratilgan qiymatlar ro'yxatini o'z ichiga oladi.
    • Ob'ekt jingalak qavslar (( va )) ichiga olinadi va vergul bilan ajratilgan nom/qiymat juftliklari roʻyxatini oʻz ichiga oladi.
    • nom/qiymat juftligi qo'sh tirnoq ichiga olingan maydon nomi, so'ngra ikki nuqta (:) va maydon qiymatidan iborat.
    • Ma'nosi massiv yoki ob'ektda quyidagilar bo'lishi mumkin:
      • Raqam (butun yoki suzuvchi nuqta)
      • Satr (ikki tirnoq ichida)
      • Mantiqiy qiymat (to'g'ri yoki noto'g'ri)
      • Boshqa massiv (kvadrat qavs ichiga olingan)
      • Boshqa ob'ekt (jingalak qavslar ichida)
      • null qiymat

    Satrga qoʻsh tirnoq qoʻshish uchun siz teskari chiziqdan foydalanishingiz kerak: \" . Koʻpgina dasturlash tillarida boʻlgani kabi, nazorat belgilar va olti burchakli kodlarni qatorga ularning oldiga teskari chiziq qoʻyish orqali qoʻyishingiz mumkin. Tafsilotlar uchun JSON veb-saytiga qarang.

    Oddiy JSON string misoli

    Quyida JSON formatida buyurtma berish misoli keltirilgan:

    ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [elektron pochta himoyalangan]", "contents": [ ( "mahsulot identifikatori": 34, "mahsulot nomi": "Super mahsulot", "miqdor": 1 ), ( "mahsulot identifikatori": 56, "productName": "Mo''jizaviy mahsulot", "miqdor": 3 ) ], "orderCompleted": true )

    Keling, qatorni batafsil ko'rib chiqaylik:

    • Biz jingalak qavslar (( va )) yordamida ob'ekt yaratamiz.
    • Ob'ektda bir nechta nom/qiymat juftlari mavjud: "orderID": 12345 "orderId" nomi va butun qiymati 12345 "shopperName": "Vanya Ivanov" "shopperName" nomli xususiyat va "Vanya Ivanov" qator qiymati " "xaridor elektron pochtasi": " [elektron pochta himoyalangan]" Satr qiymatiga ega "shopperEmail" nomli xususiyat " [elektron pochta himoyalangan]" "contents": [ ... ] Qiymati "orderCompleted" massivi bo'lgan "contents" nomli xususiyat: true "orderCompleted" nomli xususiyat va mantiqiy qiymat true
    • Tarkibdagi alohida elementlarni ifodalovchi "tarkib" massivida 2 ta ob'ekt mavjud. Har bir ob'ekt 3 xususiyatni o'z ichiga oladi: productID , productName va miqdor .

    Aytgancha, JSON JavaScript ob'ektlarini e'lon qilishga asoslanganligi sababli, siz yuqoridagi JSON qatorini tez va osonlik bilan JavaScript obyektiga aylantirishingiz mumkin:

    var cart = ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [elektron pochta himoyalangan]", "contents": [ ( "mahsulot identifikatori": 34, "mahsulot nomi": "Super mahsulot", "miqdor": 1 ), ( "mahsulot identifikatori": 56, "mahsulot nomi": "Mo''jizaviy mahsulot", "miqdor": 3 ) ], "orderCompleted": true );

    JSON va XML solishtirish

    Ko'p jihatdan JSON-ni hech bo'lmaganda veb-ilovalar maydonida XML-ga muqobil deb hisoblashingiz mumkin. AJAX kontseptsiyasi dastlab server va brauzer o'rtasida ma'lumotlarni uzatish uchun XML dan foydalanishga asoslangan edi. Ammo so'nggi yillarda JSON AJAX ma'lumotlarini tashish uchun tobora ommalashib bormoqda.

    XML juda ko'p sonli ilovalarda qo'llaniladigan tasdiqlangan texnologiya bo'lsa-da, JSON yanada ixcham va tanib olinadigan ma'lumotlar formati bo'lish afzalligiga ega.

    XML-dagi yuqoridagi misol ob'ekti shunday ko'rinadi:

    buyurtma ID 12345 xaridorning ismi Vanya Ivanov xaridor Elektron pochta [elektron pochta himoyalangan] tarkibi mahsulotID 34 mahsulot nomi Super mahsulot miqdori 1 mahsulotID 56 mahsulotNomi mo'jiza mahsulot miqdori 3 buyurtma Tugallangan rost

    XML versiyasi sezilarli darajada kattaroq. Haqiqatda u 1128 belgidan iborat, JSON versiyasi esa atigi 323 belgidan iborat. XML versiyasini tushunish ham juda qiyin.

    Albatta, bu radikal misol. Va yanada ixcham XML yozuvini yaratish mumkin. Ammo bu JSON ekvivalentidan ancha uzoqroq bo'ladi.

    JavaScript-da JSON qatori bilan ishlash

    JSON oddiy formatga ega, lekin JSON qatorini qo'lda yaratish juda zerikarli. Bundan tashqari, siz tez-tez JSON satrini olishingiz, uning mazmunini kodda ishlatilishi mumkin bo'lgan o'zgaruvchiga aylantirishingiz kerak.

    Ko'pgina dasturlash tillarida o'zgaruvchilarni JSON satrlariga va aksincha osongina aylantirish uchun vositalar mavjud.

    O'zgaruvchidan JSON qatorini yaratish

    JavaScript-da o'rnatilgan JSON.stringify() usuli mavjud bo'lib, u o'zgaruvchini oladi va uning mazmunini ifodalovchi JSON satrini qaytaradi. Misol uchun, keling, misolimizdagi buyurtma ma'lumotlarini o'z ichiga olgan JavaScript ob'ektini yaratamiz va undan keyin JSON qatorini yaratamiz:

    var cart = ( "orderID": 12345, "shopperName": "Vanya Ivanov", "shopperEmail": " [elektron pochta himoyalangan]", "contents": [ ( "mahsulot identifikatori": 34, "mahsulot nomi": "Super mahsulot", "miqdor": 1 ), ( "mahsulot identifikatori": 56, "mahsulot nomi": "Mo''jizaviy mahsulot", "miqdor": 3 ) ], "orderCompleted": true ); ogohlantirish (JSON.stringify(cart));

    Ushbu kod ishlab chiqaradi:

    E'tibor bering, JSON.stringify() usuli JSON qatorini bo'sh joysiz qaytaradi. O'qish qiyinroq, lekin tarmoq orqali uzatish uchun u ixchamroq.

    JavaScript-da JSON satrini tahlil qilishning bir necha usullari mavjud, ammo eng xavfsiz va ishonchli o'rnatilgan JSON.parse() usulidan foydalanishdir. U JSON satrini oladi va ma'lumotlarni o'z ichiga olgan JavaScript ob'ektini yoki massivni qaytaradi. Masalan:

    var jsonString = " \ ( \ "orderID": 12345, \ "shopperName": "Vanya Ivanov", \ "shopperEmail": " [elektron pochta himoyalangan]", \ "contents": [ \ ( \ "mahsulot identifikatori": 34, \ "mahsulot nomi": "Super mahsulot", \ "miqdori": 1 \), \ ( \ "mahsulot identifikatori": 56, \ "mahsulot nomi": "Mo''jizaviy tovarlar", \"miqdori": 3\ ) \ ], \"buyurtmaTo'ldirilgan": haqiqiy \ ) \"; var cart = JSON.parse(jsonString); ogohlantirish (cart.shopperEmail); ogohlantirish (cart.contents.productName);

    Biz misol tartibimizning JSON qatorini o'z ichiga olgan jsonString o'zgaruvchisini yaratdik. Keyin biz ushbu qatorni JSON.parse() usuliga o'tkazamiz, u JSON ma'lumotlarini o'z ichiga olgan ob'ektni yaratadi va uni savat o'zgaruvchisida saqlaydi. Faqat shopperEmail ob'ektining xususiyatlarini va tarkiblar massivining mahsulot nomini ko'rsatish orqali tekshirish qoladi.

    Natijada biz quyidagi natijani olamiz:

    Haqiqiy dasturda sizning JavaScript kodingiz buyurtmani server skriptidan AJAX javobida JSON qatori sifatida qabul qiladi, qatorni JSON.parse() usuliga o'tkazadi va keyin uni foydalanuvchi sahifasida ko'rsatish uchun ma'lumotlardan foydalanadi.

    JSON.stringify() va JSON.parse() boshqa imkoniyatlarga ega, masalan, ma'lum ma'lumotlarni maxsus konvertatsiya qilish uchun qayta qo'ng'iroq qilish funksiyalaridan foydalanish. Bunday variantlar turli ma'lumotlarni JavaScript ob'ektlariga aylantirish uchun juda foydali.

    PHP da JSON satri bilan ishlash

    PHP, JavaScript kabi, JSON satrlari bilan ishlash uchun o'rnatilgan funktsiyalarga ega.

    PHP o'zgaruvchisidan JSON qatorini yaratish

    json_encode() funktsiyasi PHP o'zgaruvchisini oladi va o'zgaruvchining mazmunini ifodalovchi JSON qatorini qaytaradi. Mana PHP da yozilgan buyurtma namunamiz:

    Ushbu kod JavaScript misolidagi kabi bir xil JSON qatorini qaytaradi:

    ("orderID":12345,"shopperName":"Vanya Ivanov","shopperEmail":" [elektron pochta himoyalangan]","contents":[("productID":34,"productName":"Super product","quantity":1),("productID":56,"productName":"Mo''jizaviy mahsulot","miqdor": 3)],"orderCompleted":true)

    Haqiqiy dasturda PHP skriptingiz ushbu JSON qatorini AJAX javobining bir qismi sifatida brauzerga yuboradi, bunda JavaScript kodi JSON.parse() usuli yordamida uni foydalanuvchi sahifasida ko‘rsatish uchun o‘zgaruvchiga qaytadan ajratadi. .

    Json_encode() funksiyasiga ikkinchi argument sifatida turli bayroqlarni o'tkazishingiz mumkin. Ularning yordami bilan siz o'zgaruvchilar tarkibini JSON qatoriga kodlash tamoyillarini o'zgartirishingiz mumkin.

    JSON qatoridan oʻzgaruvchi yarating

    JSON satrini PHP o'zgaruvchisiga aylantirish uchun json_decode() usulidan foydalaning. Keling, JavaScript uchun misolimizni JSON.parse() usuli bilan PHP kodi bilan almashtiraylik:

    JavaScript-da bo'lgani kabi, bu kod ishlab chiqaradi:

    [elektron pochta himoyalangan] Mo''jizaviy mahsulot

    Odatiy bo'lib, json_decode() funksiyasi JSON obyektlarini PHP obyektlari sifatida qaytaradi. StdClass sinfining umumiy PHP obyektlari mavjud. Shuning uchun biz yuqoridagi misoldagi obyektning xususiyatlariga kirish uchun -> dan foydalanamiz.

    Agar sizga JSON ob'ekti bog'langan PHP massivi sifatida kerak bo'lsa, json_decode() funktsiyasiga ikkinchi argument sifatida true ni o'tkazishingiz kerak. Masalan:

    $cart = json_decode ($jsonString, rost); echo $cart["shopperEmail"] . "
    "; echo $cart["contents"]["productName"] ."
    ";

    Ushbu kod bir xil natijani beradi:

    [elektron pochta himoyalangan] Mo''jizaviy mahsulot

    Shuningdek, json_decode() funksiyasiga boshqa argumentlarni rekursiya chuqurligi va katta tamsayılar bilan ishlash usulini belgilashingiz mumkin.

    Xulosa

    JSON tushunish va ishlatish oson bo'lsa-da, bu ilovalar va kompyuterlar o'rtasida ma'lumotlarni uzatish uchun juda foydali va moslashuvchan vositadir, ayniqsa AJAX dan foydalanganda. Agar siz AJAX ilovasini ishlab chiqmoqchi bo'lsangiz, JSON sizning ustaxonangizda muhim vositaga aylanishiga shubha yo'q.