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. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође