JSON (JavaScript Object Notation) — это текстовый формат обмена данными, основанный на синтаксисе объектов JavaScript. Он используется повсеместно: от REST API и конфигурационных файлов до хранения данных в базах и мобильных приложениях. По данным официального сайта JSON, формат не зависит от языка программирования и поддерживается практически всеми современными платформами. JSON стал стандартом де-факто для передачи данных между клиентом и сервером.
Главное
JSON — это текстовый формат для представления структурированных данных, основанный на синтаксисе JavaScript. Несмотря на происхождение из JavaScript, формат полностью независим от языка — парсеры и сериализаторы существуют для всех популярных языков программирования.
История JSON началась в начале 2000-х, когда Дуглас Крокфорд выделил подмножество синтаксиса JavaScript для обмена данными. В 2013 году формат был стандартизирован как ECMA-404, а позже — как ISO/IEC 21778:2017. Название расшифровывается как JavaScript Object Notation.
Основное преимущество JSON — минималистичный синтаксис. Для описания данных используется всего шесть типов: строка, число, булевый, null, массив и объект. Этого достаточно для представления любых структур данных, используемых в приложениях.
Синтаксис JSON предельно прост: данные представлены парами ключ-значение, где ключ — это строка в двойных кавычках, а значение — один из шести базовых типов. Объекты заключаются в фигурные скобки, массивы — в квадратные. Строки обязательно используют двойные кавычки, одинарные кавычки недопустимы.
Числа в JSON могут быть целыми или с плавающей точкой, положительными или отрицательными, с экспоненциальной записью. Булевы значения представлены литералами true и false, а отсутствие значения — null. Массивы содержат упорядоченный набор значений любого типа, включая вложенные массивы и объекты.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "поддержка вложенности"
}
}
| Тип | Пример | Описание |
|---|---|---|
| Строка | "текст" |
В двойных кавычках, с escape-последовательностями |
| Число | 42 |
Целое, дробное, экспоненциальное |
| Булевый | true |
true или false — без кавычек |
| null | null |
Отсутствие значения |
| Объект | {} |
Неупорядоченный набор пар ключ-значение |
| Массив | [] |
Упорядоченный список значений |
JSON является основным форматом обмена данными для REST API в мобильной и веб-разработке. Сервер отправляет JSON в теле ответа, клиент — в теле запроса. Стандартный заголовок Content-Type для JSON — application/json.
Современные REST API используют JSON для передачи всех типов данных: от простых списков до сложных вложенных структур с отношениями между сущностями. Клиентская библиотека (например, Axios в JavaScript или Retrofit на Android) автоматически сериализует и десериализует JSON, избавляя разработчика от ручного парсинга.
Важное преимущество JSON в REST API — возможность частичной передачи данных (partial response) через параметры запроса, а также поддержка вложенных ресурсов без дополнительных запросов к серверу.
Парсинг JSON на мобильных платформах выполняется встроенными средствами. Android использует библиотеки Gson от Google или Moshi от Square, iOS — Codable протокол с JSONDecoder. Каждая платформа предоставляет удобные инструменты для преобразования JSON в нативные объекты и обратно.
На Android популярен подход с использованием Gson или Moshi. Достаточно определить data class с аннотациями @SerializedName и вызвать fromJson для десериализации. Библиотека автоматически сопоставляет имена полей в JSON с полями класса.
import com.google.gson.Gson
import com.google.gson.annotations.SerializedName
data class User(
@SerializedName("id") val id: Int,
@SerializedName("name") val name: String,
@SerializedName("email") val email: String
)
fun parseJson(jsonString: String): User {
val gson = Gson()
return gson.fromJson(jsonString, User::class.java)
}
На iOS используется встроенный протокол Codable с JSONDecoder. Структура данных объявляется как struct с протоколом Codable, после чего JSON парсится одной строкой. JSONEncoder выполняет обратную сериализацию — преобразует объект в JSON для отправки на сервер.
import Foundation
struct User: Codable {
let id: Int
let name: String
let email: String
}
func parseJSON(from data: Data) throws -> User {
let decoder = JSONDecoder()
return try decoder.decode(User.self, from: data)
}
JSON и XML — два основных формата для передачи структурированных данных. JSON выигрывает в простоте и производительности, XML — в строгости и валидации. Выбор между ними зависит от требований проекта: для REST API чаще выбирают JSON, для сложных документов со схемами — XML.
XML требует закрывающих тегов для каждого элемента, что увеличивает размер данных в 2-3 раза по сравнению с JSON. При этом XML поддерживает пространства имён, схемы XSD, атрибуты и трансформацию XSLT, что делает его более мощным для задач документооборота и интеграции корпоративных систем.
| Характеристика | JSON | XML |
|---|---|---|
| Синтаксис | Минималистичный, ключ-значение | Теговый, открывающие и закрывающие теги |
| Размер данных | Компактный | В 2-3 раза больше JSON |
| Типы данных | Шесть базовых типов | Только текст, типы через схемы |
| Валидация | Нет встроенной, через JSON Schema | XSD — строгая и зрелая |
| Пространства имён | Нет | Полная поддержка namespace |
| Скорость парсинга | Высокая | Ниже из-за сложности |
Примеры демонстрируют типовые операции с JSON в мобильной разработке: парсинг API-ответов, создание JSON для отправки и обработку вложенных структур. Понимание этих паттернов необходимо для любого разработчика мобильных приложений.
На JavaScript JSON.stringify преобразует объект в JSON-строку. Вторым аргументом можно передать массив ключей для выборочной сериализации или функцию-заменитель. Третий аргумент задаёт отступы для форматирования.
interface Order {
id: string;
items: OrderItem[];
total: number;
createdAt: string;
}
const order: Order = {
id: 'ord_001',
items: [{ product: 'phone', quantity: 2 }],
total: 1599.98,
createdAt: '2026-07-03T10:00:00Z'
};
const jsonString = JSON.stringify(order, null, 2);
На Kotlin с библиотекой Moshi вложенные JSON-объекты обрабатываются через вложенные data classы. Аннотация @Json указывает имя поля в JSON, если оно отличается от имени свойства класса. Массивы представляются как List с типом элемента.
import com.squareup.moshi.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
data class ApiResponse(
val status: String,
val data: List<Product>,
val pagination: Pagination
)
data class Product(
val id: Int,
val title: String,
val price: Double
)
data class Pagination(
val page: Int,
val total: Int
)
val moshi = Moshi.Builder()
.add(KotlinJsonAdapterFactory())
.build()
JSON Schema — это язык описания структуры JSON-документа, аналогичный XSD для XML. С помощью JSON Schema можно задать обязательные поля, типы данных, диапазоны значений, паттерны строк и вложенную структуру. Валидация по схеме обнаруживает ошибки данных до их обработки в приложении.
JSON Schema широко используется в OpenAPI (Swagger) для документирования REST API, в формах валидации ввода данных и в тестировании. Файл схемы сам является JSON-документом, что позволяет использовать стандартные JSON-парсеры для его чтения. Существуют онлайн-валидаторы и библиотеки для всех популярных языков программирования.
В мобильной разработке JSON Schema применяется для валидации ответов от сервера на этапе тестирования и для проверки конфигурационных файлов. Библиотеки вроде network-validator на Android json-schema-validator позволяют встраивать валидацию прямо в процесс разработки, предотвращая ошибки на ранних этапах.
Часто задаваемые вопросы
JSON поддерживает шесть типов: строку (в двойных кавычках), число (целое и дробное), булевый (true/false), null, объект (пары ключ-значение в {}) и массив (список значений в []). Этого достаточно для любых структур данных в приложениях.
Нет, стандарт JSON не поддерживает комментарии. Если нужны комментарии, используйте JSON5 (расширенный JSON) или добавляйте поле с описанием, например "_comment": "пояснение". Некоторые инструменты, как VS Code, поддерживают комментарии в конфигурационных JSON-файлах, но это нестандартное расширение.
JSONB — это бинарный формат хранения JSON в PostgreSQL. В отличие от текстового JSON, JSONB быстрее обрабатывается, поддерживает индексацию (GIN-индексы) и гарантирует уникальность ключей. При этом JSONB занимает больше места на диске из-за добавления метаданных.
Используйте JSONLint (jsonlint.com) для быстрой проверки, встроенный JSON.parse() в JavaScript с try-catch, или IDE-плагины. Валидация включает проверку корректности кавычек, закрытия скобок и соответствия типов. Для сложных схем используйте JSON Schema Validator.
Ограничения нет в спецификации JSON. На практике размер ограничен памятью устройства и возможностями парсера. Для мобильных приложений рекомендуется не превышать 1-2 МБ на один ответ, а для больших данных использовать пагинацию или потоковую передачу.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также