O'zgaruvchilar, massivlar va ob'ektlar ma'lumotlarni taqdim etishning tanish va qulay shaklidir. PHP server tilida kerak bo'lmagan JavaScript brauzer tilida ma'lumotlarni tasvirlash odatiy holdir. JSON formati ularni bir butun qilib umumlashtirish va dasturlash tiliga e'tibor bermaslik imkonini beradi. Bunday holda, ma'lumotlar juftlarga aylanadi: "nom = qiymat". Ularning har biridagi qiymat ham shunday juftliklarning to'plami bo'lishi mumkin.

JSON-ni jingalak qavslar bilan bog'lash odatiy holdir va ikkinchisi juda oqlanadi, chunki JSON formati = JavaScript ob'ekt belgisi. So'nggi ayniqsa dinamik yillarda ko'p narsa o'zgardi. Muayyan maqsad uchun yaratilgan narsa ko'pincha kutilmagan natijalarga olib keldi yoki yangi ufqlarni ochdi.

Ma'lumotlar almashinuvi: brauzer - server

AJAX texnologiyasi an'anaviy, muntazam sahifa yangilanishiga aylandi butunlay mashhur bo'lishni to'xtatdi. Saytni ochgan mehmon, ma'lum sahifalar faqat tegishli joyda o'zgarganda, bir qator qisman ma'lumotlar almashinuvini boshlaydi.

JSON-ning paydo bo'lishi AJAX-dan foydalanish bilan bog'liq deb ishoniladi, ammo aslida assotsiativ va uning ob'ekt belgilari (ob'ektlarni tavsiflash va ishlatish sintaksisining xususiyatlari) o'rtasidagi ma'lumotlar almashinuviga qaraganda JSON bilan ancha bog'liq. brauzer va server.

Zamonaviy saytlar sahifalarining mazmuni haqiqatan ham "massiv" (hajmli) bo'lganligi sababli, ma'lumotlar almashinuvi formatining samaradorligi alohida ahamiyatga ega bo'ldi. Bu JSON yangi ma'lumotlar taqdimotiga aylandi, degani emas, lekin u uzoq vaqtdan beri JavaScript sintaksisining elementi bo'lib kelganligi muhim ahamiyatga ega.

O'zgaruvchilarni nomlashda kirill alifbosidan foydalanish juda kutilmagan hodisa (bema'nilik), lekin u Chrome, Firefox va hatto Internet Explorer 11 ning so'nggi versiyalarida ishlaydi.

Kirill va JSON

Albatta, ruscha harflar bilan yozilgan o'zgaruvchilarning qiymatlari g'alati bo'lib qolishini eslab, bu mutlaqo kutilmagan hodisadan foydalanishning ma'nosi yo'q: nomlar, ayniqsa tashqi ismlar haqida nima deyish mumkin.

Kirillcha nomlardagi tashabbus doimiy ravishda shug'ullanishi kerak bo'lgan brauzerning tashqi muhiti tomonidan qo'llab-quvvatlanishi shubhali. Ammo bu haqiqat oddiy sababga ko'ra e'tiborga loyiqdir, chunki JSON formati ishlab chiquvchining xohishiga ko'ra nomlar va qiymatlarni yozish qobiliyatidir. Bu juda muhim, chunki har bir vazifada dastur sohasining tavsifi, chunki u nosozliklarni tuzatishni sezilarli darajada soddalashtiradi va xatolar sonini kamaytiradi.

JSON - sintaktik innovatsiyaning aniq asosi nima bo'lishi muhim emas, u yozishmalarni o'rnatish uchun qonuniy huquq va haqiqiy imkoniyatni berganligi muhim: "har qanday nom = har qanday qiymat".

Biz JavaScript tilini hurmat qilishimiz kerak: sintaksis tomonidan taqdim etilgan narsa ishlab chiquvchini majburlamaydi va unga hech narsa yuklamaydi. Ishlab chiquvchi ma'lumotlar modeli va ulardan foydalanish algoritmini optimal shakllantirish uchun til sintaksisidan erkin foydalanadi.

PHP va JSON

JSON formatidagi ma'lumotlarni qabul qilish orqali server (xususan, PHP orqali) uni avvalgidek qayta ishlash va natijani brauzerga shunga o'xshash formatda qaytarish imkoniyatini beradi. PHP manba massivi:

  • $cJSON = massiv ("a"=> "alfa", "b"=> "beta", "g"=> "gamma").

Brauzerga yetkazib berish uchun JSON ga aylantiring:

  • $cJS = json_encode ($cJSON).

Natija:

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

Suratda ko'rsatilgan uyaga ruxsat beriladi.

Bu erda yaratilgan massiv yangi element bilan "0" avtomatik indeksi bilan, so'ngra yana ko'rsatilgan "z" indeksi bilan qo'shildi.

Json_decode() JSON qatorini PHP massiviga aylantiradi. Shunga o'xshash natijalarga funktsiyalarni manipulyatsiya qilish va portlash () orqali erishish mumkin. Ba'zi hollarda bu variant afzalroqdir.

Uyalanish darajasi

Elementlarni brauzer tomonida ham, server tomonida ham joylashtirish mumkin. Amalda, JSON formati (RFC 4627 standart tavsifi) 4 dan ortiq darajadagi joylashtirishni ta'minlaydi, ammo bu xususiyatni suiiste'mol qilmaslik kerak.

Hech qachon o'rtacha darajadan oshib ketmaslik yaxshiroqdir; bu kodni o'qishga imkon beradi, bu boshqa ishlab chiquvchilar uchun disk raskadrovka va tushunishni osonlashtiradi.

JSON odatda XML dan sodda va odamlar va kompyuterlar uchun tushunarli bo'lgan ma'lumotlar konstruksiyalari deb ataladi. Bu ma'lumotlar miqdori kichik bo'lsa va ishlab chiquvchi joylashtirish darajasini oqilona tanlagan bo'lsa, to'g'ri. Boshqa barcha holatlarda qavslar sonini hisoblash va tushunish brauzer tomonida ham, server tomonida ham qiyin.

JSON fayllari

JSON-dan amalda foydalanish ko'pincha odam o'qiy oladigan qisqa satr bilan cheklanmaydi. Har qanday ma'lumotlar konstruktsiyasi har doim pragmatikdir. Shu bilan birga, JSON ham haqiqiy topshiriq ma'lumotlarida (korxona xodimlari), ham vaqtinchalik ma'lumotlarni (ob'ekt keshini) amalga oshirish uchun samarali ishlatilishi mumkin.

Korxona xodimlari va JSON formati: misol

Odatda bir kishi haqidagi yozuv familiyasi, ismi, otasining ismi, tug'ilgan yili, mutaxassisligi, ma'lumoti, ... va boshqa bir nechta oddiy qadriyatlardir. Hatto, ayniqsa talabchan kompaniyalarda, bir kishi haqida rekord o'nlab yoki ikki sohalarda oshmaydi. Bu seziladi va ma'lumotlar bazasi qatoriga joylashtirilishi mumkin.

Agar kompaniya bir necha kishini ish bilan ta'minlasa, bu bir narsa, lekin o'n minglab odamlar bo'lsa, bu butunlay boshqacha. Siz ma'lumotlar bazasidan foydalanishni davom ettirishingiz mumkin, lekin uni fayl sifatida saqlash yanada amaliy va foydalanish uchun qulayroq ko'rinadi.

JSON oddiy matnli fayldir. Shtat jadvali bilan bog'liq vaziyat o'zgacha. Siz uni har doim o'qishingiz mumkin. Ochish va tahrirlash fayl mazmuniga o'zining xizmat ma'lumotlarini qo'shish odatiga ega bo'lmagan har qanday matn muharririda ham mavjud. Umuman olganda, *.json ham brauzer ichidagi, ham fayl ichidagi sof matn - string.

Fotosuratda rasmni tashkil etuvchi ob'ektning keshi ko'rsatilgan, misol.

Bu krujkalar va keramikalarga rangli 3D bosib chiqarishni ta'minlaydigan sayt tomonidan yaratilgan fayl mazmuniga misoldir. Tabiiyki, bunday JSON formatiga ega bo'lish, uni qanday ochishni hal qilish haqiqatan ham muammoli. Biroq, bu va shunga o'xshash holatlarda faylni o'qishda hech qanday muammo bo'lmaydi: PHP faylni o'qiydi, uni tahlil qiladi va brauzerga uzatadi. Tashrifchi tomonidan o'zgartirilgan ma'lumotlar serverga qaytariladi va qayta yoziladi.

Bunday holda, fayl koddan tashqarida saqlanadigan o'zgaruvchi sifatida ishlaydi. Agar kerak bo'lsa, o'zgaruvchi fayldan qiymat oladi va agar u sayt tomonidan taqdim etilgan dialogda tashrifchi tomonidan o'zgartirilsa, barcha o'zgarishlar avvalgidek qayd etiladi. Fayl mazmunini o'qish va tekshirishning hojati yo'q.

JSON ko'pincha xizmat ma'lumotlarini saqlash va undan foydalanish uchun ishlatiladi - bu shtat jadvali emas va uni ishlab chiquvchi ham, saytga tashrif buyuruvchi ham ko'rishi shart emas.

XML va JSON

"Hamma narsaning o'z vaqti bor" - bu dasturlash paydo bo'lishidan oldin ham aksioma sifatida qabul qilingan klassik bilim. "Hech narsa shunchaki paydo bo'lmaydi" - bu inson sun'iy tilda birinchi tushunarli dasturni yozishdan oldin sodir bo'lgan.

Ma'lumotlar formatlari haqiqiy ehtiyojlardan kelib chiqadi va erishilgan bilimlarga asoslanadi. HTML o'z yo'liga ega, XML o'z yo'liga ega va JSON boshqa tillarga kengaytirilgan JavaScript obyekt mantig'idir. Bir-birini boshqasi bilan solishtirish eng yaxshi ish emas. Har kimga o'zi.

XML o'z vazifalarini ajoyib tarzda bajara oladi va tarixga aylanmasligi aniq. Va JSON 2006 yilgacha ishlatilgan; shunchaki har bir ishlab chiquvchi o'z ma'lumotlarini taqdim etishning muayyan variantlarini e'lon qilishni o'z burchi deb hisoblamagan.

Amaliyotda JSON-dan foydalanmaydigan, lekin “nom = qiymat” juftlarini mukammal saqlaydigan va ularni kerakli vaqtda kerakli algoritmlarga taqdim etadigan dasturlar BASIC tilida yozilgan holatlar mavjud.

Maxsus belgilar (“`”, “~”, “|”, ...) va ma'lumotlar formatlari

JavaScript-da assotsiativ massivlar va ob'ektlar bilan ishlash odati JSON-dan foydalanishni tabiiy va qulay qiladi. Bu haqiqatan ham ajoyib format, lekin ajratish va qo'shilish, satrlar va massivlarni manipulyatsiya qilish qobiliyati ancha chuqurroq ildizlarga ega.

JavaScript tilining qo‘shilish/bo‘linish funksiyalari va PHP tilining portlashi/portlashi XML, JSON ma’lumotlar formatlari va o‘z versiyangizdan qulay va samarali foydalanish imkonini beradi. Ikkinchisi ko'pincha maqbuldir, birinchi ikkitasi esa umumiy foydalanish variantlari uchun idealdir. Agar ma'lumot boshqa dasturchiga, serverga, faylga yoki ma'lumotlar bazasiga uzatilayotgan bo'lsa, XML va JSONni topishning yaxshiroq yo'li yo'q. Har bir inson ular bilan ishlaydi, shuning uchun ma'lumotni uzatish / qabul qilish sharhlarni talab qilmaydi.

Androidda JSON dan foydalanish

Android-da JSON formatida ma'lumotlarni o'qish va yozish nafaqat norma, balki ushbu ma'lumot formati bilan ishlashga qaratilgan ko'plab ob'ektlar ham mavjud.

Bunday holda, JSON formati ishlatiladi. Bu to'g'ri bo'lishi mumkin, ammo savol ijtimoiy tarmoqlarning fenomenalligida emas, balki "nom = qiymat" formatidagi ma'lumotlarni taqdim etish dasturlash uchun ham, foydalanish uchun ham haqiqatan ham qulaydir. Qattiq va murakkab "XML" dan farqli o'laroq, bu haqiqatan ham inson uchun qulay formatdir.

Assotsiativ massivlar

Shunday qilib, o'zgaruvchilar tasvirlangan bo'lishi kerak (JavaScript) yoki hech bo'lmaganda boshlang'ich qiymati ko'rsatilishi kerak (PHP). Ikkala holatda ham o'zgaruvchi o'z turini juda oson o'zgartirishi mumkin. Agar kerak bo'lsa, til bu konvertatsiyani avtomatik ravishda amalga oshiradi.

Lekin nima uchun o'zgaruvchi ham o'z nomini o'zgartirmasligi, algoritmni bajarish jarayonida paydo bo'lishi va endi kerak bo'lmaganda yo'qolmasligi kerak? Assotsiativ massivlar bu muammoni hal qiladi, ammo keyin bunday nisbatan dinamik o'zgaruvchilardan foydalanganda massiv nomi va mos keladigan sintaktik konstruktsiyalar ular qo'llanilgan joyga ergashadi.

Bu holat ayniqsa PHPda yaqqol ifodalanadi, lekin siz bunga chidashingiz mumkin, chunki o'zgaruvchi nomidagi "$" belgisi va ob'ekt ichidagi "$this->" kombinatsiyasi. Bir vaqtning o'zida JavaScript va PHP da dasturlash, avvaliga hamma narsa bir-biridan qanchalik farq qilishidan hayratda qolasiz, lekin keyin hamma narsa shunchalik tanish va tabiiy bo'lib qoladi...

Assotsiativ massiv -> JSON

Bu misolda PHPOffice/PHPWord kutubxonasi yordamida *.docx hujjati yaratilgan va aProperties massivida ushbu hujjatning xossalari mavjud (muallif, kompaniya, sarlavha, kategoriya, yaratilgan sana...).

Ikkinchi massiv sahifa uchun ma'lumotlarni o'z ichiga oladi:

  • orientatsiya (peyzaj yoki normal);
  • vertikal va gorizontal o'lchamlar;
  • chekinishlar (chap, yuqori, pastki, o'ng chetlari);
  • sarlavhalar va pastki ma'lumotlar.

Hujjat PHPOffice/PHPWord kutubxonasi o'rnatilgan serverda yaratiladi. Sayt JavaScript yordamida ushbu massivlarning qiymatlarini boshqarish imkonini beradi. JSON formatidagi natija serverga qaytariladi va PHP algoritmlarida, uning konstruktsiyalarida, ya'ni massivlarda qo'llaniladi.

Dinamik o'zgaruvchilar

JSON formati dinamik o'zgaruvchilar muammosini hal qiladi. Bu yerda siz keraksiz sintaktik tartibsizliklarsiz o'zgaruvchilarni yaratishingiz, o'zgartirishingiz va o'chirishingiz mumkin. Bu chiroyli ko'rinadi va JavaScript-da qo'llaniladi.

Ushbu misolda GetOjInfo() funksiyasi obyektdan qiymat nomi va qiymatini oladi. Dastlab, ojInfo o'zgaruvchisiga tayinlangan JSON string ob'ekti uchta elementga ega: Ism, yosh va ish. Birozdan keyin Status o'zgaruvchisi qo'shiladi.

Birinchi o'chirish operatoridan keyin ojInfo qatori yosh elementini, ikkinchi o'chirishdan keyin esa ishchi elementni yo'qotadi. Agar bu qator ma'lum bir ma'noga ega bo'lgan o'zgaruvchilar tanlovi deb faraz qilsak, JSON yordamida siz JavaScript tilini tavsiflash va qayta ishlashning operatsion maydonidan (sintaksisi) tashqarida ularning har qanday to'plamini yaratishingiz, o'zgartirishingiz va o'chirishingiz mumkin.

JSON formati ushbu parametr uchun mo'ljallanmagan, ammo bu mumkin, amaliy va qulay.

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, "productName": "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 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, "productName": "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 ilovada sizning PHP skriptingiz ushbu JSON qatorini AJAX javobining bir qismi sifatida brauzerga yuboradi, bu yerda JavaScript kodi JSON.parse() usuli yordamida uni foydalanuvchi sahifasida ko‘rsatish uchun o‘zgaruvchiga qayta tahlil qiladi. .

    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.

    ) 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 sahifada autentifikatsiya qilingan foydalanuvchilarning boshqa maxfiy ma'lumotlari. boshqa sayt.

    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 nima ekanligini va uning boshqa ma'lumotlar formatlaridan qanday afzalliklari borligini o'rganadigan dars.

    JSON tushunchasi

    JSON (JavaScript Object Notation) bu JavaScript ob'ekt belgilarida ma'lumotlarni ko'rsatish uchun matn formatidir.

    Bu JSON-dagi ma'lumotlar JavaScript ob'ektidagi kabi tartibga solinganligini anglatadi. Ammo ikkinchisidan farqli o'laroq, JSON yozish formati biroz keyinroq muhokama qilinadigan ba'zi xususiyatlarga ega.

    JSON odatda AJAX bilan birgalikda ishlatiladi, shunda server qulay shaklda ma'lumotlarni JavaScript skriptiga o'tkazishi mumkin, keyin esa uni sahifada ko'rsatadi.

    JSON formatining tuzilishi

    JavaScript-da ob'ektlarni yaratish jarayoni bilan tanish bo'lgan har bir kishi JSON formati tuzilishida hech qanday yangilikni ko'rmaydi. Buning sababi shundaki, JSON strukturasi ba'zi cheklovlar bilan JavaScript ob'ektining tuzilishiga amal qiladi.

    JSON ni elementlardan tashkil topgan konteyner sifatida tasavvur qilish osonroq. Bunday konteynerdagi har bir element kalit va qiymatdan tashkil topgan ma'lum bir strukturaviy birlikdir.

    Bunday holda, qiymat kalit bilan bevosita bog'liq va kalit-qiymat juftligini hosil qiladi. Bunday ob'ektdagi qiymatni olish uchun siz uning kalitini bilishingiz kerak. Sintaktik jihatdan bunday ma'lumotlar JSONda quyidagicha yoziladi:

    Yuqoridagi yozuvda kalit ikki nuqta (:) yordamida qiymatdan ajratilganligini ko'rishingiz mumkin. Bunday holda, JSON ob'ektidagi kalit qo'sh tirnoq ichiga olinishi kerak. Bu JSON ning JavaScript obyektidan ajratib turadigan birinchi xususiyati. Chunki JavaScript ob'ektida kalit (ob'ekt xususiyati) qo'sh tirnoq ichiga olinishi shart emas.

    Misol uchun, JavaScript nuqtai nazaridan haqiqiy, lekin JSON nuqtai nazaridan haqiqiy bo'lmagan ob'ekt tuzilishi:

    Var person = (ism: "Ivan"; ) // JavaScript obyekti

    Ogohlantirish: ma'lumotlarga kirishni murakkablashtirmaslik uchun kalitni nomlashga harakat qiling, ya'ni. Ismni tuzishda tuya yozuviga rioya qilish yoki so'zlarni bog'lash uchun pastki chiziqdan ("_") foydalanish afzalroqdir.

    JSON-dagi kalit qiymati quyidagi formatlardan birida yozilishi mumkin: string, raqam, ob'ekt, massiv, mantiqiy (mantiqiy qiymat rost yoki noto'g'ri), null (maxsus JavaScript qiymati).

    Bu JSONdagi ikkinchi cheklov, chunki JavaScript ob'ekti har qanday ma'lumot turini, shu jumladan funktsiyani o'z ichiga olishi mumkin.

    Var person = ( "name" : "Ivan"; "setName": function() ( console.log(this.name); ) ) // JavaScript obyekti

    Bir elementni (kalit-qiymat juftligi) boshqasidan ajratish uchun vergul (,) belgisidan foydalaning.

    Misol uchun, turli xil ma'lumotlar turlaridan iborat JSON-ni ko'rib chiqing.

    Diqqat: JSON ma'lumotlar formati o'z tuzilmasida sharhlarga ruxsat bermaydi.

    JavaScript-da JSON bilan ishlash

    JavaScript ob'ektidan farqli o'laroq, JSON bu qatordir.

    Masalan:

    // masalan, personData o'zgaruvchisi JSON bo'lgan qatorni o'z ichiga oladi var personData = "("name":"Ivan","age":37,"mother":("name":"Olga","age": 58),"children":["Masha","Igor","Tanya"],"turmushlangan": rost,"it": null)";

    JSON bilan ishlash odatda ikki yo'nalishda amalga oshiriladi:

  • Tahlil qilish - bu JSON o'z ichiga olgan qatorni JavaScript ob'ektiga tarjima qilish harakati.
  • JavaScript obyektini JSON satriga aylantiring. Boshqacha qilib aytganda, bu harakat tahlil qilishning aksini qiladi.
  • JSON tahlili

    JSON tahlili, ya'ni. JSON satrini JavaScript obyektiga tarjima qilish eval() yoki parse() usullari yordamida amalga oshiriladi.

    eval() usulidan foydalanish:

    // shaxs oʻzgaruvchisi JavaScript obyekti boʻlib, JSON kodini (string) bajarish orqali olinadi var person= eval("("+personData+")");

    JSON.parse() usulidan foydalanish:

    // shaxs oʻzgaruvchisi JavaScript obyekti boʻlib, u JSON qatorini tahlil qilish orqali olinadi var person = JSON.parse(personData);

    JavaScript obyektini JSON qatoriga aylantirish

    JavaScript obyektini JSON satriga tarjima qilish JSON.stringify() usuli yordamida amalga oshiriladi. Bu usul JSON.parse() usulining aksini bajaradi.

    Var personString = JSON.strigify(shaxs);

    JSON formatining afzalliklari

    JSON ma'lumotlar formati quyidagi afzalliklarga ega:

    • JSON qatorini JavaScript ob'ektiga va orqaga aylantirish (tahlil qilish) uchun mo'ljallangan qulay va tez ishlatiladigan usullar;
    • aniq va oddiy ma'lumotlar tuzilishi;
    • boshqa ma'lumotlar formatlari (masalan, XML) bilan solishtirganda juda kichik hajmi. Buning sababi, JSON formatida mumkin bo'lgan minimal formatlash mavjud, ya'ni. Uni yozishda faqat bir nechta maxsus belgilar ishlatiladi. Bu juda muhim afzallik, chunki... JSON formatida taqdim etilgan maʼlumotlar boshqa formatlarda taqdim etilganidan koʻra tezroq yuklanadi.

    Ushbu format juda ko'p afzalliklarga ega bo'lganligi sababli, u nafaqat JavaScript-da, balki C, Ruby, Perl, Python, PHP va boshqalar kabi ko'plab boshqa tillarda ham qo'llanila boshlandi.

    JSON va XML formatlarini solishtirish

    JSON formati XML formatiga nisbatan quyidagi afzalliklarga ega:

  • Ba'zi ma'lumotlarni uzatish uchun JSON hajmi XML o'lchamidan sezilarli darajada kichikroq bo'ladi.
  • JSON JavaScript ma'lumotlar tuzilmalariga XMLga qaraganda yaxshiroq konvertatsiya qilish usullariga ega.
  • JSON yaratish XML ga qaraganda osonroq.
  • Tahlildan keyin JSON ma'lumotlari bilan ishlash JavaScript obyekti sifatida amalga oshiriladi.

    //JSON var personData = "("name":"Ivan","yosh":37,"ona":("name":"Olga","yosh":58),,"children":["Masha" " ,"Igor","Tanya"],"uylangan": rost,"it": null)"; //JavaScript ob'ekti shaxs var shaxs = JSON.parse(personData);

    Keling, asosiy fikrlarni ko'rib chiqaylik:

    //kalit (xususiyat) nomining qiymatlarini oling person.name; shaxs["ism"]; //ona shaxs.ona.nomi ob'ektida joylashgan kalit (mulk) nomining qiymatlarini oling; //yosh elementini o'chirish delete(person.age) //qo'shish (yoki yangilash) kaliti (mulk) person.eye = "jigarrang"; //massivlar bilan ishlashda maxsus massivlar bilan ishlash uchun moʻljallangan usullardan foydalanish kerak //massivdan 1 ta elementni olib tashlash (qoʻshish usuli) person.children.splice(1,1) //massivga element qoʻshish (push usuli) ) shaxs.bolalar. surish("Katya");

    Ob'ektdagi elementlarni takrorlash uchun siz for..in tsiklidan foydalanishingiz mumkin:

    Uchun (shaxsan kalit) ( if (person.hasOwnProperty(kalit)) ( //key = kalit //qiymat = person console.log("Key = " + key); console.log("Qiymat = " + shaxs) ; ) // agar shaxs ob'ektida kalit bo'lsa (agar shaxs kalit xususiyatiga ega bo'lsa) ) // ob'ektdagi barcha kalitlarni (xususiyatlarni) takrorlash

    Massiv elementlarini takrorlash uchun siz quyidagi tsikldan foydalanishingiz mumkin:

    Uchun (var i=0; i

    Foydalanuvchilarning ushbu faylni ochishiga to'sqinlik qiladigan eng keng tarqalgan muammo - bu noto'g'ri tayinlangan dastur. Buni Windows operatsion tizimida tuzatish uchun kontekst menyusidagi faylni sichqonchaning o'ng tugmasi bilan bosishingiz kerak, sichqonchani "Ochish" bandiga olib boring va ochiladigan menyudan "Dasturni tanlang ..." ni tanlang. Natijada, siz kompyuteringizda o'rnatilgan dasturlarning ro'yxatini ko'rasiz va siz mos keladiganini tanlashingiz mumkin. Shuningdek, “Ushbu ilovadan barcha JSON fayllari uchun foydalanish” yonidagi katakchani belgilashni tavsiya etamiz.

    Foydalanuvchilarimiz ham tez-tez duch keladigan yana bir muammo JSON fayli buzilganligidir. Bu holat ko'p hollarda paydo bo'lishi mumkin. Masalan: server xatosi natijasida fayl toʻliq yuklab olinmadi, fayl dastlab shikastlangan va hokazo. Ushbu muammoni hal qilish uchun tavsiyalardan birini qoʻllang:

    • Internetdagi boshqa manbadan kerakli faylni topishga harakat qiling. Sizga mosroq versiyani topish omadingiz bo'lishi mumkin. Google qidiruviga misol: "Fayl fayl turi: JSON" . Faqat "fayl" so'zini o'zingiz xohlagan nom bilan almashtiring;
    • Ulardan sizga asl faylni yana yuborishlarini so'rang, u uzatish paytida shikastlangan bo'lishi mumkin;