json

Передача сложных типов данных — JSON

JSON (JavaScript Object Notation) — это механизм представления объектов, структур в виде сокращенной записи javaScript.

На примерах рассмотрим краткую запись создания структур данных — массив и объект:

//массив краткая запись
var a = new array(one,'two');
var a1 = ['one','two'];
//Объект подробная запись
var b = new Object();
b.name='apple';
b.color='green';
alert(b.name + b.color);
//Объект краткая запись
var c = {'name':'apple', 'color':'green'};
//пример объекта
{'fruit':'apple',
 'color':'green',
 'price':'50'};

Именно на таких принципах строится JSON. Вообще, у JSON есть 2 структуры:

  • набор пар имя:значение — это объект;
  • пронумерованный набор значений — это массив.

Всего у JSON 4 основополагающие сущности:

  • Объект — неупорядоченное множество пар имя/значение, заключенное в фигурные скобки {}. Между именем и значением стоит символ ‘;’, а пары имя/значение разделяются запятыми (пример см. выше).
{'fruit':'apple',
 'color':'green',
 'price':'50'};
  • Массив (одномерный) — это множество значений, имеющих порядковые номера (индексы). Массив заключается в квадратные скобки []. Значения разделяются запятыми.
['one','two','три','4']
  • Значение может быть строкой в двойных кавычках, числом, true, false, null, объектом, массивом. Допускается вложенность.
  • Строка — символы в юникоде (чтобы избежать проблем с кодировкой). Пишется в двойных кавычках.

JSON используется для сохранения и передачи данных.

Есть понятие сериализации и десериализации. Сериализация — это когда объект в памяти преобразуется в какой-то поток данных (текст или бинарное представление), который можно передать. Десериализация — из потока данных восстановление исходного объекта. При этих 2-х процессах восстанавливаются только свойства объекта, но не его методы. Т.е. эти процессы происходят только на уровне структур, но не объекта.

Рассмотрим десериализацию на примере:

//есть строка текста в виде JSON
var JSONStr = '{"fruit":"apple", "color":"green", "price":12}';
//восстановим объект
var fruit = eval ("("+ JSONStr +")");

Опасность простой десериализации заключается в том, что в строку текста могут дописать какой-то вредоносный код, и при сборке он выполнится.

На официальном сайте json.org есть готовые решения для сериализации и десериализации для многих языков программирования.

На сервере сериализация пакета JSON происходит при помощи функции encode. Сначала сервер считывает сырые необработанные данные, посланные методом POST (допустим), потом функция декодирования — decode. Потом сервер вставляет данные в базу данных. Затем возвращает результат через encode.

// в $v лежит пакет json
$out = json_encode($v);
echo ($out);



Добавить комментарий

Ваш e-mail не будет опубликован.