JSON (JavaScript Object Notation) é um formato de intercâmbio de dados baseado em texto, fundamentado na sintaxe de objetos JavaScript. É utilizado em toda parte: desde APIs REST e arquivos de configuração até armazenamento de dados em bancos de dados e aplicações móveis. De acordo com o site oficial do JSON, o formato é independente de linguagem e suportado por praticamente todas as plataformas modernas. JSON tornou-se o padrão de facto para transferência de dados entre cliente e servidor.
Principais pontos
JSON é um formato de texto para representar dados estruturados, baseado na sintaxe JavaScript. Apesar das suas origens em JavaScript, o formato é completamente independente de linguagem — existem analisadores e serializadores para todas as linguagens de programação populares.
A história do JSON começou no início dos anos 2000, quando Douglas Crockford extraiu um subconjunto da sintaxe JavaScript para intercâmbio de dados. Em 2013, o formato foi padronizado como ECMA-404, e posteriormente como ISO/IEC 21778:2017. O nome significa JavaScript Object Notation.
A principal vantagem do JSON é a sua sintaxe minimalista. Apenas seis tipos são usados para descrever dados: string, número, booleano, null, array e objeto. Isso é suficiente para representar qualquer estrutura de dados usada em aplicações.
A sintaxe JSON é extremamente simples: os dados são representados como pares chave-valor, onde a chave é uma string entre aspas duplas e o valor é um dos seis tipos básicos. Objetos são delimitados por chaves, arrays por colchetes. Strings devem usar aspas duplas; aspas simples não são permitidas.
Números em JSON podem ser inteiros ou de ponto flutuante, positivos ou negativos, com notação exponencial. Valores booleanos são representados pelos literais true e false, e a ausência de valor por null. Arrays contêm um conjunto ordenado de valores de qualquer tipo, incluindo arrays e objetos aninhados.
{
"name": "JSON",
"type": "text",
"version": 2024,
"flexible": true,
"extensions": null,
"languages": [
"JavaScript",
"Python",
"Java"
],
"nested": {
"info": "suporte a aninhamento"
}
}
| Tipo | Exemplo | Descrição |
|---|---|---|
| String | “texto” |
Entre aspas duplas, com sequências de escape |
| Número | 42 |
Inteiro, ponto flutuante, exponencial |
| Booleano | true |
true ou false — sem aspas |
| null | null |
Ausência de valor |
| Objeto | {} |
Conjunto não ordenado de pares chave-valor |
| Array | [] |
Lista ordenada de valores |
JSON é o principal formato de intercâmbio de dados para APIs REST no desenvolvimento móvel e web. O servidor envia JSON no corpo da resposta, o cliente no corpo da requisição. O cabeçalho Content-Type padrão para JSON é application/json.
APIs REST modernas usam JSON para transmitir todos os tipos de dados: desde listas simples até estruturas aninhadas complexas com relações entre entidades. Bibliotecas cliente (como Axios em JavaScript ou Retrofit no Android) serializam e desserializam JSON automaticamente, libertando o desenvolvedor da análise manual.
Uma vantagem importante do JSON em APIs REST é a capacidade de transferência parcial de dados (resposta parcial) através de parâmetros de consulta, bem como o suporte a recursos aninhados sem requisições adicionais ao servidor.
A análise JSON em plataformas móveis é realizada usando ferramentas integradas. Android usa Gson do Google ou Moshi do Square, iOS usa o protocolo Codable com JSONDecoder. Cada plataforma fornece ferramentas convenientes para converter JSON em objetos nativos e vice-versa.
No Android, a abordagem popular usa Gson ou Moshi. Basta definir uma classe de dados com anotações @SerializedName e chamar fromJson para desserialização. A biblioteca mapeia automaticamente os nomes dos campos JSON para as propriedades da classe.
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)
}
No iOS, é usado o protocolo integrado Codable com JSONDecoder. A estrutura de dados é declarada como um struct em conformidade com Codable, após o que o JSON é analisado com uma única linha. JSONEncoder realiza a serialização reversa — converte um objeto em JSON para envio ao servidor.
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 e XML são os dois principais formatos para transmitir dados estruturados. JSON vence em simplicidade e desempenho, XML em rigor e validação. A escolha entre eles depende dos requisitos do projeto: APIs REST usam mais frequentemente JSON, documentos complexos com esquemas usam XML.
XML requer tags de fecho para cada elemento, aumentando o tamanho dos dados em 2-3 vezes em comparação com JSON. Ao mesmo tempo, XML suporta espaços de nomes, esquemas XSD, atributos e transformação XSLT, tornando-o mais poderoso para gestão de documentos e integração de sistemas empresariais.
| Característica | JSON | XML |
|---|---|---|
| Sintaxe | Minimalista, chave-valor | Baseada em tags, abertura e fecho |
| Tamanho dos dados | Compacto | 2-3 vezes maior que JSON |
| Tipos de dados | Seis tipos básicos | Apenas texto, tipos via esquemas |
| Validação | Não incorporada, via JSON Schema | XSD — rigorosa e madura |
| Espaços de nomes | Nenhum | Suporte completo a namespace |
| Velocidade de análise | Alta | Menor devido à complexidade |
Os exemplos demonstram operações típicas com JSON no desenvolvimento móvel: análise de respostas de API, criação de JSON para envio e processamento de estruturas aninhadas. Compreender estes padrões é essencial para qualquer desenvolvedor de aplicações móveis.
Em JavaScript, JSON.stringify converte um objeto numa string JSON. O segundo argumento pode ser um array de chaves para serialização seletiva ou uma função de substituição. O terceiro argumento define a indentação para formatação.
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);
Em Kotlin com a biblioteca Moshi, objetos JSON aninhados são tratados através de classes de dados aninhadas. A anotação @Json especifica o nome do campo JSON se diferir do nome da propriedade da classe. Arrays são representados como List com o tipo do elemento.
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 é uma linguagem para descrever a estrutura de um documento JSON, semelhante ao XSD para XML. Usando JSON Schema, pode especificar campos obrigatórios, tipos de dados, intervalos de valores, padrões de strings e estrutura aninhada. A validação do esquema deteta erros de dados antes de serem processados na aplicação.
JSON Schema é amplamente usado em OpenAPI (Swagger) para documentar APIs REST, em formulários de validação de dados de entrada e em testes. O ficheiro de esquema é ele próprio um documento JSON, permitindo que analisadores JSON padrão o leiam. Existem validadores online e bibliotecas para todas as linguagens de programação populares.
No desenvolvimento móvel, JSON Schema é usado para validar respostas do servidor durante testes e para verificar ficheiros de configuração. Bibliotecas como network-validator no Android e json-schema-validator permitem incorporar a validação diretamente no processo de desenvolvimento, prevenindo erros em fases iniciais.
Perguntas frequentes
JSON suporta seis tipos: string (entre aspas duplas), número (inteiro e ponto flutuante), booleano (true/false), null, objeto (pares chave-valor em {}) e array (lista de valores em []). Isso é suficiente para qualquer estrutura de dados em aplicações.
Não, o padrão JSON não suporta comentários. Se precisar de comentários, use JSON5 (JSON estendido) ou adicione um campo de descrição, por exemplo “_comment”: “explicação”. Algumas ferramentas, como o VS Code, suportam comentários em ficheiros JSON de configuração, mas isto é uma extensão não padrão.
JSONB é um formato de armazenamento binário para JSON no PostgreSQL. Ao contrário do JSON textual, JSONB é mais rápido de processar, suporta indexação (índices GIN) e garante unicidade de chaves. No entanto, JSONB ocupa mais espaço em disco devido aos metadados adicionados.
Use JSONLint (jsonlint.com) para validação rápida, o JSON.parse() incorporado em JavaScript com try-catch, ou plugins de IDE. A validação inclui verificar aspas corretas, fecho de parênteses e conformidade de tipos. Para esquemas complexos, use JSON Schema Validator.
Não há limite na especificação JSON. Na prática, o tamanho é limitado pela memória do dispositivo e pelas capacidades do analisador. Para aplicações móveis, recomenda-se não exceder 1-2 MB por resposta, e para dados grandes usar paginação ou transmissão em fluxo.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também