Знаймо

Додати знання

приховати рекламу

Цей текст може містити помилки.

JSON



План:


Введення

JSON ( англ. JavaScript Object Notation ) - Текстовий формат обміну даними, заснований на JavaScript і зазвичай використовується саме з цією мовою. Як і багато інших текстові формати, JSON легко читається людьми.

Незважаючи на походження від JavaScript (точніше, від підмножини мови стандарту ECMA-262 1999), формат вважається язиконезавісімим і може використовуватися практично з будь-якою мовою програмування. Для багатьох мов існує готовий код для створення та обробки даних в форматі JSON.


1. Використання

За рахунок своєї лаконічності порівняно з XML, формат JSON може бути більш підходящим для сериализации складних структур. Якщо говорити про веб-додатках, в такому ключі він доречний в задачах обміну даними як між браузером і сервером ( AJAX), так і між самими серверами (програмні HTTP-інтерфейси). Формат JSON також добре підходить для зберігання складних динамічних структур в реляційних базах даних або файловому кеші.

Оскільки формат JSON є підмножиною синтаксису мови JavaScript, то він може бути швидко десеріалізован вбудованою функцією eval(). Крім того, можлива вставка цілком працездатних JavaScript-функцій. У PHP, починаючи з версії 5.2.0, підтримка JSON включена в ядро у вигляді функцій json_decode () і json_encode (), які самі перетворять типи даних JSON у відповідні типи PHP і навпаки.


2. Синтаксис

JSON будується на двох структурах:

Це - універсальні структури даних. Теоретично, всі сучасні мови програмування підтримують їх у тій або іншій формі. Так як JSON використовується для обміну даними між різними мовами програмування, то має сенс будувати його на цих структурах.

У JSON використовуються їх наступні форми:

  • Об'єкт - це невпорядкована множина пар ім'я / значення, укладена у фігурні дужки {}. Між ім'ям і значенням стоїть символ ":", а пари ім'я / значення розділяються комами.
  • Масив (одновимірний) - це безліч значень, що мають порядкові номери (індекси). Масив полягає в квадратні дужки []. Значення відокремлюються комами.
  • Значення може бути рядком в подвійних лапках, числом, значенням true або false, об'єктом, масивом, або значенням null. Ці структури можуть бути вкладені один в одного.
  • Рядок - це впорядкована множина з нуля або більше символів юникода, укладена в подвійні лапки, з використанням escape-послідовностей починаються з зворотної косої риси (backslash). Символи представляються простий рядком.

Рядок дуже схожа на рядок в мовах З і Java. Число теж дуже схоже на С або Java-число, за винятком того, що використовується тільки десятковий формат. Прогалини можуть бути вставлені між будь-якими двома символами.

Наступний приклад показує JSON-представлення об'єкту, що описує людину. У об'єкті є рядкові поля імені і прізвища, об'єкт, що описує адресу, і масив, що містить список телефонів.

 {  "FirstName"  :  "Іван"  ,  "LastName"  :  "Іванов"  ,  "Address"  :  {  "StreetAddress"  :  "Московське ш., 101, кв.101"  ,  "City"  :  "Ленінград"  ,  "PostalCode"  :  101101  }  ,  "PhoneNumbers"  :  [  "812 123-1234"  ,  "916 123-4567"  ]  } 

Мовою XML подібна структура виглядала б приблизно так:

  >   >  Іван   >   >  Іванов   >  
> > Московське ш., 101, кв.101 > > Ленінград > > 101101 > > > > 812 123-1234 > > 916 123-4567 > > >

або так:

  firstName  =  "Іван"  lastName  =  "Іванов"  >  
streetAddress = "Московське ш., 101, кв.101" city = "Ленінград" postalCode = "101101" /> > > 812 123-1234 > > 916 123-4567 > > >

3. Порівняння з YAML

Як функціонально, так і синтаксично JSON є підмножиною мови YAML. Зокрема, специфікація YAML 1.2 вказує, що "будь-який файл у форматі JSON є коректним файлом у форматі YAML" [1]. Найбільш поширений парсер YAML здатний обробляти і JSON [2]. Специфікація YAML до версії 1.2 не повністю покривала JSON, в першу чергу через відсутність рідної підтримки UTF-32 в YAML, а також вимоги пропусків після роздільника-коми. Крім того, специфікація JSON включала коментарі в стилі / * * /.

Найбільш важливою відмінністю YAML є набір розширень синтаксису, яким немає аналогів в JSON:

Реляційний:
YAML підтримує реляційні дані: у YAML-документі можна посилатися на якір, що зустрівся раніше у файлі / потоці. Таким чином можна висловити рекурсивні структури.
Розширюваний:
YAML підтримує розширювані типи даних крім примітивів (тобто рядків, чисел, логічних змінних).
Блоки:
в YAML доступний блоковий синтаксис з відступами, він дозволяє описати структуровані дані без використання зайвих символів (усіляких дужок, лапок і т. д.).

4. JSON Schema

JSON Schema - одна з мов опису структури JSON документа. Використовує синтаксис JSON. Базується на концепціях XML Schema, RelaxNG, Kwalify. JSON Schema - самоопісательний мову: при його використанні для обробки даних та опис їх допустимості можуть використовуватися одні й ті ж інструменти сериализации / десеріалізациі [3].

5. Використання JSON в Ajax

Наступний приклад Javascript-код показує, як браузер може використовувати XMLHttpRequest, щоб запитувати з сервера об'єкт у форматі JSON (cерверная частина програми опущена; в ній повинен бути розміщений код, що відправляє дані в форматі JSON-рядки у відповідь на запити за url).

 var  the_object  ;  var  http_request  =  new  XMLHttpRequest  (  )  ;  http_request.  open  (  "GET"  ,  url  ,  true  )  ;  http_request.  send  (  null  )  ;  http_request.  onreadystatechange  =  function  (  )  {  if  (  http_request.  readyState  ==  4  )  {  if  (  http_request.  status  ==  200  )  {  the_object  =  eval  (  "("  +  http_request.  responseText  +  ")"  )  ;  }  else  {  alert  (  "There was a problem with the URL."  )  ;  }  http_request  =  null  ;  }  }  ; 

Зауважимо, що даний приклад застосування XMLHttpRequest не є універсальним для всіх браузерів (для браузерів, заснованих на Internet Explorer, Opera, Safari і Mozilla, в коді повинні бути ті чи інші відмінності). Можливості застосування XMLHttpRequest обмежені через правила обмеження домену (same origin policy): URL відповіді на запит повинен знаходитися в тому ж DNS домені, що й сервер, на якому знаходиться сторінка, запитуюча відповідь. В якості альтернативи застосовується підхід JSONP, що включає в себе використання закодованого виклику функції, що передається між клієнтом і сервером, щоб клієнт міг завантажувати закодовані в JSON дані зі сторонніх доменів, і повідомляти про завершення викликає сторону, хоча це призводить до деяких ризиків для безпеки і додатковим вимогам до сервера.

Як варіант, в коді сторінки можна використовувати елементи < iframe > < iframe > < iframe > для асинхронного запиту JSON даних, або просто

. Ці підходи були поширені до появи широкої підтримки XMLHttpRequest.

Також можна використовувати для передачі JSON-даних динамічні теги для звернення до серверів відмінним від сервера з якого сталася завантаження сторінки.

Без використання технології JSONP (тобто використовуючи просто JSON кодування даних) сервер може повернути тільки дані. Наприклад так:

 {  "Paper"  :  "A4"  ,  "Count"  :  5  } 

Однак це тільки дані і вони не можуть впливати на браузер.

Використовуючи техніку JSONP, сторонньому серверу передається в рядку виклику (GET) ім'я callback функції:

 

Цей текст може містити помилки.

Схожі роботи | скачати
© Усі права захищені
написати до нас
Рейтинг@Mail.ru