AULA 36 MÓDULO 4 APIs REST ⏱ 45 min

JSON: o Formato de Dados da Web

JSON: tipos válidos, armadilhas, datas. JSON.stringify e parse. Validação com Zod. JSON Schema como documentação.

JSONstringifyparseZodschemavalidaçãoISO 8601

JSON — JavaScript Object Notation

JSON é o formato padrão para troca de dados na web. Leve, legível por humanos, parseável por máquinas. Substituiu XML por ser mais simples e diretamente mapeado para objetos JavaScript.

TIPOS VÁLIDOS EM JSON
string
"hello" "2024-01-15T10:30:00Z"
number
42 3.14 -100
boolean
true false
null
null
array
[1, "dois", true, null]
object
{"key": "value", "n": 42}
⚠️
JSON não aceita
Undefined, funções, símbolos, Date nativa, Map, Set. Datas devem ser strings ISO 8601: "2024-01-15T10:30:00Z".

JSON Schema — validar estrutura

JSON Schema define e valida a estrutura esperada de um JSON. É o que OpenAPI usa internamente para descrever request/response bodies.

🔬
zod no Node.js
Zod é a biblioteca de validação mais popular em TypeScript/Node. Define schemas em código e valida em runtime. Schema vira documentação automática com ts-to-zod.
javascript
// JSON — operações essenciais

// Serializar objeto → string JSON
const user = { id: 1, name: 'Ana', createdAt: new Date() }
const json = JSON.stringify(user, null, 2)
// {"id":1,"name":"Ana","createdAt":"2024-01-15T10:30:00Z"}

// Parsear string JSON → objeto
const parsed = JSON.parse(json)

// Validação com Zod
const { z } = require('zod')

const UserSchema = z.object({
  name:  z.string().min(2).max(100),
  email: z.string().email(),
  age:   z.number().int().min(18).optional()
})

// Validar no endpoint
app.post('/users', (req, res) => {
  const result = UserSchema.safeParse(req.body)
  if (!result.success) {
    return res.status(400).json({ errors: result.error.flatten() })
  }
  // result.data está validado e com tipos corretos
})
quiz · aula 36
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Qual tipo de dado NÃO é válido em JSON?
QUESTÃO 02
Como representar uma data em JSON?
QUESTÃO 03
Para que serve JSON Schema (ou Zod)?
0/3