Содержание

JSON

JSON (JavaScript Object Notation) — простой формат обмена данными, основан на JavaScript. Представляет собой собой популярную альтернативу использованию xml для предоставления данных в Принципы построения AJAX JS. Стандарт JSON описан в RFC 4627 application/json.

JSON является подмножеством языка Что такое YAML. Спецификация YAML 1.2 указывает, что любой файл в формате JSON является корректным файлом в формате YAML.

Пример данных в форматах xml и JSON:

<! Формат XML >
<author>
<name>Wendell Berry</name>
<books>
<book>The Unsettling of America</book>
<book>What are People For?</book>
</books>
</author>

// Формат JSON
{
"name": "Wendell Berry",
"books": [
"The Unsettling of America",
"What are People For?"
]
}
Последние версии браузеров имеют встроенную поддержку JSON и способны его обрабатывать без вызова функции eval(), например IE c 8 версии. Популярные библиотеки JavaScript используют встроенный JSON в случае его доступности: jQuery, Dojo, MooTools, Prototype, YUI.

Синтаксис

Стандарт RFC 4627 предписывает кодировать JSON только в Unicode. Кодировкой по умолчанию является UTF-8 и допускаются еще UTF-16 и UTF-32 в разновидности BE и LE (порядок следования байт). Тип кодировки должен определяться парсером автоматически на основе первых 4 байт (глава 3 стандарта).

JSON - текстовый формат, полностью независимый от языка реализации, но он использует соглашения, знакомые программистам C- подобных языков, таких как C, C++, C#, Как установить Java на Ubuntu, JavaScript, perl, Синтаксис Python и многих других.

JSON строится на двух универсальных структурах данных:

  1. Набор пар ключ/значение. В других языках аналогами являются объект, запись, структура, словарь, хэш- таблица, ассоциативный массив.
  2. Пронумерованный набор значений. В других языках аналогами являются массив, вектор, список, последовательность.

Формы структур:

Функции PHP для работы с JSON

Если мы хотим получить массив в JSON формате, нам нужно только использовать встроенные готовые PHP функции:

  1. json_encode()
  2. json_decode() - Декодирует строку JSON.
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
 
var_dump(json_decode($json));
var_dump(json_decode($json, true));
 
?>

JSONP и JSONPP

JSONP (аJSON Padding — «JSON с подкладкой») является расширением JSON, когда имя функции обратного вызова указывается в качестве входного аргумента.

В основу технологии положен тот факт, что политика безопасности браузера не запрещает использовать тег

<script type="text/javascript" src="…"></script>

для обращения к серверам, отличным от сервера, с которого произошла загрузка страницы.

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

{"paper": "A4", "count": 5}

Однако это только данные, и они не могут влиять на браузер.

Используя технику JSONP, стороннему серверу передаётся в строке вызова (GET) имя callback функции:

<script type="text/javascript" src="http://example.com/getjson?jsonp=parseResponse"></script>

Здесь параметр jsonp содержит имя callback функции parseResponse.

Теперь посторонний сервер example.com может вернуть следующий код:

parseResponse({"paper": "A4", "count": 5})

Теперь код вызывает javascript-функцию первого домена.

Первоначально идея была предложена в блоге MacPython в 2005 году[25] и в настоящее время используется многими Web 2.0 приложениями, такими, как Dojo Toolkit Applications, Google Toolkit Applications и zanox Web Services. Дальнейшие расширения этого протокола были предложены с учётом ввода дополнительных аргументов, как, например, в случае JSONPP] при поддержке S3DB веб-сервисов.

Поскольку JSONP использует скрипт теги, вызовы по сути открыты миру. По этой причине JSONP может быть неуместными для хранения конфиденциальных данных.

Ссылки