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);