JSON x literal de objeto JavaScript

JSON se parece com um literal de objeto JavaScript, mas é um formato de dados menor, com sintaxe mais estrita e sem valores executáveis.

Versão curta

Um literal de objeto JavaScript é código fonte. JSON é um formato de intercâmbio de dados. A sobreposição é grande o bastante para confundir, mas as regras são diferentes: chaves e strings JSON exigem aspas duplas, JSON não tem comentários e JSON não consegue representar funções, undefined, NaN, Infinity, objetos Date ou expressões regulares.

Valores JSON válidos

Um documento JSON pode conter um objeto, array, string, número, booleano ou null. Strings precisam usar aspas duplas. As chaves de objeto também precisam ser strings entre aspas duplas. Números não podem usar formas exclusivas de JavaScript como notação hexadecimal, NaN, Infinity ou separadores numéricos.

  • String JSON válida: "hello"
  • Booleano JSON válido: true
  • Null JSON válido: null
  • Chave de objeto JSON válida: "name"

JavaScript válido mas JSON inválido

{ name: 'Ada', active: true, createdAt: new Date(), onSave() { return true }, tags: ['dev',], }

Versão JSON válida

{ "name": "Ada", "active": true, "createdAt": "2026-05-13T00:00:00.000Z", "tags": ["dev"] }

Por que as APIs rejeitam dados com cara de JavaScript

Servidores de API geralmente parseiam o corpo da requisição com um parser JSON, não com um motor JavaScript. Isso é um recurso de segurança e interoperabilidade: qualquer linguagem consegue parsear os mesmos dados sem executar código. Se um corpo inclui comentários, métodos, undefined ou new Date(), o servidor não consegue tratá-lo como dado puro com segurança.

Como converter com segurança

Troque valores executáveis ou específicos da linguagem por dados simples. Datas viram strings, valores ausentes viram null ou chaves omitidas, comentários migram para a documentação, e funções são representadas por campos de dados explícitos como um nome de estratégia ou de tipo.