Código de produção · unidade 24 de 27

JSON

Serializar muda a forma — e pode perder informação.

8 min de leitura · 7 cards · 16 exercícios

Card 1 de 7: JSON01 / 07

Leitura

Stringify, parse seguro, replacer, reviver, NDJSON e os limites de usar JSON como clone.

No backend, esse fundamento aparece quando o código transforma entrada em decisão. O detalhe de linguagem deixa de ser acadêmico no momento em que altera um payload, uma regra de negócio ou a forma como uma falha chega à camada seguinte.

A forma mais útil de estudar é ligar a sintaxe a um contrato observável: o que entra, o que pode mudar, qual resultado sai e qual erro deve continuar o fluxo. É esse raciocínio que os exemplos e exercícios desta unidade procuram treinar.

Código

exemplo.js
const parsed = parseJson(body)

if (!parsed.ok) {
  return reply.code(400).send({ error: "invalid json" })
}

O que fica

  • JSON.parse pode lançar e deve ficar na fronteira de entrada.
  • JSON.stringify omite valores e transforma tipos como Date.
  • Replacer, reviver e NDJSON tornam o contrato explícito.

Prática guiada.Leia, rode, quebre e explique cada exercício.

Prática guiada / unidade 24

Um problema de cada vez.

Leia o contrato, escreva sua tentativa e confira os casos esperados. A resolução de referência permanece visível ao final de cada exercício.

Fundamentalexercício 01 / 16

toJsonString(value)

01 / Entenda

Enunciado

serializa value para uma string JSON compacta (sem espaçamento), usando JSON.stringify.

02 / Implemente

Sua tentativa

Comece pela assinatura e resolva sem olhar a resposta.

ponto de partida
function toJsonString(value) {
  // Escreva sua solução aqui.
}

03 / Preveja

Entrada e saída

Use estes exemplos para entender o contrato antes de programar.

Entrada / chamada

toJsonString({ a: 1, b: "x" })

Retorno esperado

'{"a":1,"b":"x"}'

Entrada / chamada

toJsonString([1, 2, 3])

Retorno esperado

"[1,2,3]"

Entrada / chamada

toJsonString(null)

Retorno esperado

"null"

04 / Teste

Prove que funciona

O teste chama sua função e compara o resultado real com o esperado.

Como utilizar este teste

  1. 01Implemente a função usando exatamente o nome e os parâmetros do enunciado.
  2. 02Salve sua implementação em exercises.js, na mesma pasta do teste.
  3. 03Abra o terminal nessa pasta e execute o comando abaixo.
  4. 04Se falhar, compare “esperado” com “recebido”; essa diferença mostra o caso que precisa ser corrigido.
node --test --test-name-pattern="toJsonString" exercises.test.js

Comportamentos cobertos

  • serializa valores simples e objetos sem espaçamento
Ver código completo do teste
test("toJsonString: serializa valores simples e objetos sem espaçamento", () => {
  assert.equal(toJsonString({ a: 1, b: "x" }), '{"a":1,"b":"x"}');
  assert.equal(toJsonString([1, 2, 3]), "[1,2,3]");
  assert.equal(toJsonString(null), "null");
});

Ainda travou?

Dicas graduais

Nível 1 — direção, sem código

Para toJsonString/prettyJsonString: JSON.stringify aceita três parâmetros. O terceiro controla o quê exatamente?

Nível 2 — pista mais direta

toJsonString: JSON.stringify(value).

05 / Compare

Resolução

Esta área permanece livre em todos os exercícios. O código atual da unidade aparece abaixo para comparação com os testes e casos esperados.
código disponível
function toJsonString(value) {
  return JSON.stringify(value);
}