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 MB на отговор, а за големи данни да използвате пагинация или поточна предавка.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също