JSON
JSON
Определение JSON
JSON (JavaScript Object Notation) - это легкий формат обмена данными, основанный на подмножестве языка JavaScript. JSON предоставляет простой способ хранения и передачи структурированных данных между компьютерами. Он легко читаем для людей и легко парсится (анализируется) и генерируется компьютерами.
Основные характеристики JSON:
Текстовый формат: JSON представляет собой текст в формате, легком для чтения и написания.
Независимость от языка: JSON поддерживается многими языками программирования и может быть использован для обмена данными между различными языками.
Структурированные данные: JSON представляет собой набор пар “ключ-значение”. Значения могут быть строками, числами, логическими значениями, объектами, массивами или специальными значениями
null.
Пример JSON-данных:
1{
2 "name": "John Doe",
3 "age": 30,
4 "isStudent": false,
5 "courses": ["Math", "History", "Computer Science"],
6 "address": {
7 "street": "123 Main St",
8 "city": "Anytown",
9 "zipCode": "12345"
10 }
11}
В этом примере есть объект с различными типами данных, включая строки, числа, логические значения, массив и вложенные объекты. JSON широко используется для обмена данными в веб-приложениях и в других контекстах, где необходимо передавать структурированные данные между программами.
История и применение
История JSON
JSON был представлен в 2001 году Дугласом Крокфордом (Douglas Crockford). Он разработал JSON как легковесный альтернативный формат обмена данными по сравнению с XML. JSON был создан для удовлетворения потребностей в простоте чтения и записи структурированных данных в веб-приложениях.
JSON основан на подмножестве языка JavaScript и используется для сериализации (преобразования в строку) и десериализации (преобразования из строки) объектов данных. С течением времени JSON стал широко принятым форматом для обмена данными между веб-серверами и клиентскими приложениями.
Применение JSON
Веб-разработка: JSON широко используется в веб-разработке для передачи данных между клиентскими и серверными частями веб-приложений. Он часто используется в комбинации с технологиями AJAX для асинхронного обмена данными между браузером и сервером.
API (Интерфейс программирования приложений): Множество веб-сервисов предоставляют данные в формате JSON через свои API. Это делает их легкими для использования и интеграции в различные приложения.
Настроек и конфигураций: JSON широко применяется для хранения настроек и конфигураций в приложениях, так как он обеспечивает удобный формат для представления структурированных данных.
Хранение данных: JSON используется для хранения и обмена данными в различных приложениях, таких как базы данных, конфигурационные файлы и другие хранилища данных.
Языки программирования: Многие современные языки программирования предоставляют встроенную поддержку для работы с JSON, что упрощает его использование в приложениях.
NoSQL базы данных: Некоторые NoSQL базы данных используют JSON для представления данных, что делает их более гибкими и легкими в использовании.
JSON стал основой для обмена данными в современном веб-мире благодаря своей простоте, удобству в использовании и поддержке различных языков программирования.
Синтаксис JSON
Основные правила и структура
Объекты (Objects): Объект в JSON представляет собой неупорядоченный набор пар “ключ-значение”. Объекты начинаются с открывающей фигурной скобки
{и заканчиваются закрывающей фигурной скобкой}. Ключ и значение разделяются двоеточием:. Каждая пара “ключ-значение” отделена запятой,. Ключ должен быть строкой (в двойных кавычках), а значение может быть строкой, числом, логическим значением, объектом, массивом илиnull.1{ 2 "name": "John", 3 "age": 25, 4 "isStudent": false, 5 "address": { 6 "city": "New York", 7 "zipcode": "10001" 8 }, 9 "courses": ["Math", "History"] 10}Массивы (Arrays): Массив в JSON представляет собой упорядоченный список значений. Массивы начинаются с открывающей квадратной скобки
[и заканчиваются закрывающей квадратной скобкой]. Значения в массиве разделяются запятой.1{ 2 "fruits": ["apple", "orange", "banana"], 3 "numbers": [1, 2, 3, 4, 5] 4}Строки (Strings): Строки в JSON должны быть заключены в двойные кавычки.
1{ 2 "name": "Alice", 3 "city": "Paris" 4}Числа (Numbers): Числа в JSON могут быть целыми или числами с плавающей точкой.
1{ 2 "age": 30, 3 "temperature": 98.6 4}Логические значения (Boolean): JSON поддерживает логические значения
trueиfalse.1{ 2 "isStudent": true, 3 "hasCar": false 4}Null: Значение
nullиспользуется для представления отсутствия значения.1{ 2 "data": null 3}Пробелы и отступы: Пробелы и отступы в JSON не обязательны, но их использование улучшает читаемость. Однако для передачи данных по сети JSON-данные обычно минимизируют без использования пробелов.
1{"name":"Bob","age":22,"city":"London"}
Эти основные правила составляют структуру JSON, делая его легким для чтения человеком и легким для обработки программами.
Сравнение JSON с другими форматами данных
Сравнение с XML
JSON (JavaScript Object Notation) и XML (eXtensible Markup Language) - два различных формата обмена данными, каждый из которых имеет свои особенности и преимущества. Вот некоторые сравнения между JSON и XML:
- Читаемость:
- JSON: Легко читаем и написать для человека, так как использует минимальное количество символов и не содержит закрывающих тегов.
- XML: Требует больше символов для представления данных, использует открывающие и закрывающие теги, что может сделать документ более громоздким.
- Обработка данных:
- JSON: Обработка данных в формате JSON происходит быстрее, так как JSON является более компактным и легковесным.
- XML: XML требует больше ресурсов для обработки из-за необходимости анализа тегов и атрибутов.
- Структура данных:
- JSON: Поддерживает объекты (наборы пар “ключ-значение”) и массивы (упорядоченные списки значений).
- XML: Определяет структуру данных с использованием тегов, атрибутов и текстовых узлов.
- Расширяемость:
- JSON: Менее расширяем по сравнению с XML. JSON-документы не поддерживают пространства имен и некоторые другие возможности, характерные для XML.
- XML: Имеет больше возможностей для расширения, таких как пространства имен, что делает его более подходящим для сложных структур данных.
- Поддержка языков программирования:
- JSON: Большинство языков программирования имеют встроенную поддержку для JSON, что облегчает работу с данными.
- XML: Также поддерживается многими языками программирования, но работа с XML-данными может потребовать больше кода.
- Использование:
- JSON: Широко используется в веб-разработке и API для передачи данных. Часто используется в AJAX-запросах и RESTful API.
- XML: Используется в различных областях, включая настройки приложений, обмен данными между системами и хранение структурированных данных.
Выбор между JSON и XML зависит от конкретных потребностей приложения, структуры данных и контекста использования. JSON обычно предпочтителен для простых и легковесных структур данных, в то время как XML может быть более подходящим для сложных и разветвленных структур данных.
YAML
YAML (YAML Ain’t Markup Language или YML) - это язык разметки данных, который обеспечивает читаемость людьми и поддерживает сложные структуры данных. В отличие от JSON и XML, YAML использует пробелы и отступы для обозначения структуры, что делает его особенно удобным для конфигурационных файлов и других сценариев, где читаемость имеет большое значение.
Вот основные характеристики YAML:
Простота чтения и написания: YAML разрабатывался с учетом читаемости человеком. Синтаксис YAML близок к естественному языку и не требует многословного кода.
Специальные символы: YAML использует пробелы и отступы для обозначения структуры данных, в отличие от JSON и XML, которые используют специальные символы и теги.
Структуры данных: YAML поддерживает структуры данных, такие как списки, хэши (ассоциативные массивы), строки, числа и логические значения.
Пример YAML-документа:
1name: John Doe
2age: 30
3isStudent: false
4courses:
5 - Math
6 - History
7address:
8 street: "123 Main St"
9 city: Anytown
10 zipCode: "12345"
В этом примере:
name: John Doe- пара ключ-значение для строки.age: 30- пара ключ-значение для числа.isStudent: false- пара ключ-значение для логического значения.courses:- ключ для списка (массива) значений.address:- ключ для вложенного хэша (ассоциативного массива).
YAML широко используется для конфигурационных файлов, Docker Compose, Ansible playbooks и других контекстов, где важна простота использования и читаемость.
TOML
TOML (Tom’s Obvious, Minimal Language, или просто TOML) - это еще один язык конфигурационных файлов, который, как и YAML, стремится быть читаемым человеком и простым для написания. TOML был создан Томасом Престоном-Вернером и предназначен для использования в настройках конфигурации и метаданных.
Вот основные характеристики TOML:
Простота чтения и написания: TOML стремится быть простым и легко читаемым, предлагая явный и минималистичный синтаксис.
Многострочные строки: TOML поддерживает многострочные строки, что может быть удобным для включения длинных текстовых данных в конфигурационные файлы.
Типы данных: TOML поддерживает различные типы данных, такие как строки, числа, булевы значения, даты и времена.
Пример TOML-документа:
1name = "John Doe"
2
3[personal]
4age = 30
5isStudent = false
6
7[courses]
8math = true
9history = true
10
11[address]
12street = "123 Main St"
13city = "Anytown"
14zipCode = "12345"
В этом примере:
name = "John Doe"- простой ключ-значение для строки.[personal],[courses],[address]- секции (группировка параметров).age = 30,isStudent = false- параметры внутри секции.math = true,history = true- параметры в другой секции.
TOML используется в различных проектах, таких как Rust (где TOML часто используется для файлов конфигурации проекта), Hugo (статический генератор сайтов), и других. Выбор между TOML и YAML зависит от предпочтений и требований конкретного проекта.
Преимущества и недостатки JSON
Преимущества JSON
Простота чтения и записи: JSON легко читаем для человека и легко записываем программами. Это делает его удобным форматом для обмена данными.
Компактность и эффективность передачи: JSON обычно более компактен, чем XML, что снижает объем передаваемых данных. Это особенно важно для веб-приложений, где пропускная способность сети может быть ограничена.
Поддержка многих языков программирования: Многие современные языки программирования предоставляют встроенную поддержку для работы с JSON. Это упрощает анализ и создание JSON-данных в различных средах.
Удобство для веб-разработки: JSON широко используется в веб-разработке, особенно в AJAX-запросах и RESTful API, для передачи данных между браузером и сервером.
Гибкость структуры данных: JSON поддерживает объекты и массивы, что обеспечивает гибкость в представлении различных структур данных.
Легкость в интеграции: JSON хорошо интегрируется с различными технологиями и легко встраивается в современные приложения.
Недостатки JSON
Отсутствие поддержки пространств имен: В отличие от XML, JSON не поддерживает пространства имен, что может быть ограничивающим в некоторых контекстах.
Недостаточная поддержка для документации: JSON не предоставляет стандартизированного средства для документации данных, что делает его менее подходящим для самодокументированных форматов, в сравнении, например, с XML и XML-схемами.
Отсутствие возможности комментирования данных: JSON не предоставляет встроенного механизма комментирования данных, хотя в некоторых случаях это может считаться преимуществом для уменьшения размера данных.
Ограниченная поддержка бинарных данных: JSON предназначен для представления текстовых данных, и его поддержка для бинарных данных ограничена.
Нет дополнительных возможностей для описания схемы данных: В отличие от XML, JSON не предоставляет явной схемы данных (как XML Schema), что может быть проблемой в случаях, когда требуется строгое определение структуры данных.
В целом, JSON является широко используемым форматом обмена данными с преимуществами в простоте использования и эффективности передачи, но с некоторыми ограничениями, которые нужно учитывать в зависимости от конкретных требований проекта.
Использование JSON в разработке
Как JSON используется в веб-разработке
JSON широко используется в веб-разработке для обмена данными между клиентскими и серверными компонентами в формате, который легко интерпретировать и создавать с использованием различных языков программирования. Вот несколько областей, где JSON активно применяется в веб-разработке:
AJAX (Asynchronous JavaScript and XML): JSON часто используется вместе с технологией AJAX для асинхронной передачи данных между браузером и сервером. Браузер отправляет запрос на сервер, и сервер возвращает данные в формате JSON. Браузер затем использует JavaScript для динамического обновления содержимого страницы на основе полученных данных без полной перезагрузки страницы.
RESTful API (Representational State Transfer): Многие веб-сервисы используют JSON для представления данных в RESTful API. Запросы и ответы в RESTful API часто передаются в формате JSON, что обеспечивает простоту и удобство обмена данными между клиентскими и серверными приложениями.
Обработка данных на стороне клиента: Веб-приложения на стороне клиента, написанные на JavaScript, могут динамически обрабатывать и отображать данные, представленные в формате JSON. Это может включать в себя обновление интерфейса, создание динамических графиков и диаграмм, а также другие манипуляции данными.
Хранение и передача конфигурационных данных: JSON часто используется для хранения конфигурационных данных в веб-приложениях. Например, настройки приложения, список доступных языков, параметры маршрутизации и другие конфигурационные данные могут быть представлены в формате JSON.
Взаимодействие с внешними API: Множество внешних сервисов и API возвращают данные в формате JSON. При взаимодействии с такими API веб-приложения могут отправлять запросы и получать структурированные данные в формате JSON для дальнейшей обработки.
Применение JSON в этих контекстах обеспечивает гибкость, простоту в использовании и прозрачность при передаче данных между различными компонентами веб-приложений.
Взаимодействие с сервером через JSON
Для взаимодействия с сервером через JSON на стороне клиента, часто используется Fetch API, который предоставляет более современный и удобный способ выполнения HTTP-запросов. Вот пример взаимодействия с сервером через JSON с использованием Fetch:
1// Формирование данных на стороне клиента
2const userData = {
3 username: "john_doe",
4 email: "john@example.com",
5 password: "securepassword"
6};
7
8// Отправка запроса на сервер
9fetch("/api/user", {
10 method: "POST",
11 headers: {
12 "Content-Type": "application/json"
13 },
14 body: JSON.stringify(userData)
15})
16 .then(response => {
17 // Проверка успешности запроса
18 if (!response.ok) {
19 throw new Error(`HTTP error! Status: ${response.status}`);
20 }
21 // Преобразование ответа в JSON
22 return response.json();
23 })
24 .then(data => {
25 // Обработка данных, полученных от сервера
26 console.log("Server response:", data);
27 })
28 .catch(error => {
29 // Обработка ошибок
30 console.error("Error:", error.message);
31 });
В этом примере:
fetchиспользуется для отправки HTTP-запроса на сервер.- Заголовки
Content-Typeуказывают, что данные, отправляемые на сервер, представлены в формате JSON. JSON.stringify(userData)используется для преобразования объектаuserDataв строку JSON.response.json()преобразует полученный ответ от сервера в объект JavaScript.
Этот код может быть использован, например, при регистрации нового пользователя. На серверной стороне вам потребуется обработать этот запрос и выполнить соответствующие операции, такие как сохранение пользователя в базе данных.
Важно также обеспечивать безопасность передачи данных и обработку ошибок как на стороне клиента, так и на стороне сервера.
Работа с JSON в различных языках программирования
Примеры работы с JSON в JavaScript, Python, Java
Вот примеры работы с JSON в нескольких популярных языках программирования: JavaScript, Python, Java.
JavaScript
Парсинг (Преобразование строки JSON в объект):
1const jsonString = '{"name": "John", "age": 25, "city": "New York"}';
2const jsonObject = JSON.parse(jsonString);
3console.log(jsonObject);
Строкификация (Преобразование объекта в строку JSON):
1const jsonObject = { name: "Alice", age: 30, city: "Paris" };
2const jsonString = JSON.stringify(jsonObject);
3console.log(jsonString);
Python
Парсинг:
1import json
2
3json_string = '{"name": "John", "age": 25, "city": "New York"}'
4python_object = json.loads(json_string)
5print(python_object)
Строкификация:
1python_object = {"name": "Alice", "age": 30, "city": "Paris"}
2json_string = json.dumps(python_object)
3print(json_string)
Java
Java имеет библиотеку Jackson, которая широко используется для работы с JSON. Ниже представлен пример использования ObjectMapper из Jackson:
1import com.fasterxml.jackson.databind.ObjectMapper;
2
3public class JsonExample {
4 public static void main(String[] args) throws Exception {
5 // Парсинг
6 String jsonString = "{\"name\": \"John\", \"age\": 25, \"city\": \"New York\"}";
7 ObjectMapper objectMapper = new ObjectMapper();
8 Person person = objectMapper.readValue(jsonString, Person.class);
9 System.out.println(person);
10
11 // Строкификация
12 Person alice = new Person("Alice", 30, "Paris");
13 String jsonResult = objectMapper.writeValueAsString(alice);
14 System.out.println(jsonResult);
15 }
16}
17
18class Person {
19 private String name;
20 private int age;
21 private String city;
22
23 // Конструктор, геттеры, сеттеры и другие методы
24
25 @Override
26 public String toString() {
27 return "Person{" +
28 "name='" + name + '\'' +
29 ", age=" + age +
30 ", city='" + city + '\'' +
31 '}';
32 }
33}
В этом примере создается объект Person, который может быть преобразован в JSON и обратно с использованием ObjectMapper.
Обратите внимание, что в каждом из этих примеров представлены базовые операции: парсинг (преобразование строки JSON в объект/структуру данных) и строкификация (преобразование объекта в строку JSON). Однако реальные примеры будут зависеть от конкретных задач и контекста ваших приложений.
Валидация JSON
Проверка корректности JSON-данных
Проверка корректности JSON-данных может быть выполнена с использованием встроенных средств языков программирования или сторонних библиотек. Вот примеры для JavaScript, Python и Java:
JavaScript
1function isValidJSON(jsonString) {
2 try {
3 JSON.parse(jsonString);
4 return true;
5 } catch (error) {
6 return false;
7 }
8}
9
10const jsonExample = '{"name": "John", "age": 25, "city": "New York"}';
11console.log(isValidJSON(jsonExample)); // Вернет true
12
13const invalidJson = '{"name": "John", "age": 25, "city": "New York"'; // Не закрыта фигурная скобка
14console.log(isValidJSON(invalidJson)); // Вернет false
Python
1import json
2
3def is_valid_json(json_string):
4 try:
5 json.loads(json_string)
6 return True
7 except json.JSONDecodeError:
8 return False
9
10json_example = '{"name": "John", "age": 25, "city": "New York"}'
11print(is_valid_json(json_example)) # Вернет True
12
13invalid_json = '{"name": "John", "age": 25, "city": "New York"' # Не закрыта фигурная скобка
14print(is_valid_json(invalid_json)) # Вернет False
Java
В Java можно использовать библиотеку Jackson для проверки корректности JSON.
1import com.fasterxml.jackson.core.JsonParseException;
2import com.fasterxml.jackson.databind.JsonNode;
3import com.fasterxml.jackson.databind.ObjectMapper;
4
5public class JsonValidationExample {
6 public static boolean isValidJson(String jsonString) {
7 try {
8 ObjectMapper objectMapper = new ObjectMapper();
9 JsonNode jsonNode = objectMapper.readTree(jsonString);
10 return true;
11 } catch (JsonParseException e) {
12 return false;
13 } catch (Exception e) {
14 return false;
15 }
16 }
17
18 public static void main(String[] args) {
19 String jsonExample = "{\"name\": \"John\", \"age\": 25, \"city\": \"New York\"}";
20 System.out.println(isValidJson(jsonExample)); // Вернет true
21
22 String invalidJson = "{\"name\": \"John\", \"age\": 25, \"city\": \"New York\""; // Не закрыта фигурная скобка
23 System.out.println(isValidJson(invalidJson)); // Вернет false
24 }
25}
В каждом из этих примеров создается функция (или метод) для проверки корректности JSON-данных. Обратите внимание, что эти методы могут вернуть true, если данные соответствуют формату JSON, и false в противном случае.
Примеры задач, решаемых с использованием JSON
Хранение конфигураций
Хранение конфигураций с использованием JSON обеспечивает структурированный и легко читаемый способ представления параметров настройки приложения. Вот пример, как может выглядеть файл конфигурации в формате JSON:
1{
2 "app": {
3 "name": "MyApp",
4 "version": "1.0",
5 "debugMode": false
6 },
7 "database": {
8 "host": "localhost",
9 "port": 5432,
10 "username": "admin",
11 "password": "securepassword",
12 "dbName": "mydatabase"
13 },
14 "server": {
15 "host": "127.0.0.1",
16 "port": 3000
17 }
18}
В этом примере:
appсодержит общие настройки приложения.databaseсодержит параметры подключения к базе данных.serverсодержит параметры сервера приложения.
Как использовать JSON-конфигурации в различных языках программирования:
JavaScript (Node.js):
1const fs = require('fs');
2
3// Чтение JSON-конфигурации из файла
4const configFile = fs.readFileSync('config.json', 'utf8');
5const config = JSON.parse(configFile);
6
7// Использование параметров конфигурации
8console.log(config.app.name);
9console.log(config.database.host);
10console.log(config.server.port);
Python:
1import json
2
3# Чтение JSON-конфигурации из файла
4with open('config.json', 'r') as file:
5 config = json.load(file)
6
7# Использование параметров конфигурации
8print(config['app']['name'])
9print(config['database']['host'])
10print(config['server']['port'])
Java:
1import com.fasterxml.jackson.databind.ObjectMapper;
2
3public class ConfigExample {
4 public static void main(String[] args) throws Exception {
5 // Чтение JSON-конфигурации из файла
6 ObjectMapper objectMapper = new ObjectMapper();
7 Config config = objectMapper.readValue(ConfigExample.class.getResourceAsStream("/config.json"), Config.class);
8
9 // Использование параметров конфигурации
10 System.out.println(config.getApp().getName());
11 System.out.println(config.getDatabase().getHost());
12 System.out.println(config.getServer().getPort());
13 }
14}
15
16class Config {
17 private AppConfig app;
18 private DatabaseConfig database;
19 private ServerConfig server;
20
21 // Геттеры и сеттеры для каждого класса конфигурации
22}
23
24class AppConfig {
25 private String name;
26 private String version;
27 private boolean debugMode;
28
29 // Геттеры и сеттеры
30}
31
32class DatabaseConfig {
33 // Параметры подключения к базе данных
34}
35
36class ServerConfig {
37 // Параметры сервера
38}
В этом примере созданы отдельные классы для каждой части конфигурации, что делает код более структурированным и легко поддерживаемым. Все приведенные примеры предполагают, что файл config.json находится в том же каталоге, что и исполняемый код.
Обмен данными между клиентом и сервером
Обмен данными между клиентом и сервером на основе JSON является распространенным подходом в веб-разработке. Протоколы, такие как AJAX, Fetch API и HTTP, обеспечивают возможность отправки и получения данных в формате JSON между клиентом и сервером. Давайте рассмотрим примеры в JavaScript (клиентская сторона) и Python (серверная сторона).
JavaScript (клиентская сторона)
1// Отправка данных на сервер в формате JSON
2const sendDataToServer = async () => {
3 const dataToSend = {
4 username: "john_doe",
5 email: "john@example.com",
6 age: 25
7 };
8
9 try {
10 const response = await fetch('/api/dataEndpoint', {
11 method: 'POST',
12 headers: {
13 'Content-Type': 'application/json'
14 },
15 body: JSON.stringify(dataToSend)
16 });
17
18 if (!response.ok) {
19 throw new Error(`HTTP error! Status: ${response.status}`);
20 }
21
22 const responseData = await response.json();
23 console.log('Data received from server:', responseData);
24 } catch (error) {
25 console.error('Error:', error.message);
26 }
27};
28
29// Получение данных с сервера в формате JSON
30const fetchDataFromServer = async () => {
31 try {
32 const response = await fetch('/api/dataEndpoint');
33
34 if (!response.ok) {
35 throw new Error(`HTTP error! Status: ${response.status}`);
36 }
37
38 const responseData = await response.json();
39 console.log('Data received from server:', responseData);
40 } catch (error) {
41 console.error('Error:', error.message);
42 }
43};
44
45// Вызов функций для отправки и получения данных
46sendDataToServer();
47fetchDataFromServer();
Python (серверная сторона) с использованием Flask
1from flask import Flask, request, jsonify
2
3app = Flask(__name__)
4
5# Пример обработчика для приема данных в формате JSON
6@app.route('/api/dataEndpoint', methods=['POST'])
7def receive_data():
8 try:
9 data_received = request.get_json()
10 # Обработка данных на сервере
11 processed_data = {'status': 'success', 'message': 'Data received successfully'}
12 return jsonify(processed_data)
13 except Exception as e:
14 return jsonify({'status': 'error', 'message': str(e)})
15
16# Пример обработчика для отправки данных в формате JSON
17@app.route('/api/dataEndpoint', methods=['GET'])
18def send_data():
19 try:
20 # Подготовка данных на сервере
21 data_to_send = {'username': 'alice', 'age': 30, 'city': 'Paris'}
22 return jsonify(data_to_send)
23 except Exception as e:
24 return jsonify({'status': 'error', 'message': str(e)})
25
26if __name__ == '__main__':
27 app.run(debug=True)
В этом примере Flask используется для создания простого сервера. Обработчики /api/dataEndpoint служат для отправки и получения данных в формате JSON. Клиентская и серверная стороны взаимодействуют посредством запросов и ответов, содержащих JSON-данные.