Olá, Web Developers!
Há algum tempo eu escrevi um post onde eu chamei um objeto de JSON, e um leitor me corrigiu. Ele estava completamente certo!
Muitas pessoas (inclusive eu) possuem a mania de chamar qualquer objeto JavaScript de JSON e muitas acreditam que são a mesma coisa. Isso está errado e eu notei que há muitas pessoas perguntando essa diferença, inclusive em grupos do Facebook e no StackOverflow.
Curso AngularJS - Criação de interfaces web
Conhecer o cursoQual a diferença entre um Objeto Literal e o JSON?
Muitos sabem que o nome JSON vem de “JavaScript Object Notation”. Então, por que objetos JavaScript escritos de forma literal nem sempre são JSON?
{
"a": 2,
"b": 3
}
O exemplo acima pode ser considerado tanto um objeto literal em JavaScript quanto um JSON. Acontece que o JSON é um formato usado para a transferência de dados, independente de linguagem de programação, assim como o XML, CSV ou YAML.
Apesar da sintaxe de um objeto literal e do JSON serem muito parecidas (a ponto de podermos usar um JSON como objeto literal), o JSON possui especificações. Se sairmos dessas especificações, não estamos mais falando de um JSON.
Principais Diferenças entre JSON e Objeto Literal JavaScript
Chaves - As chaves no JSON devem vir entre aspas duplas. No Objeto Literal, as chaves podem ser strings com aspas simples, duplas, sem aspas, variáveis ou Symbols.
Valores - O Objeto Literal JavaScript aceita qualquer tipo de dado presente na linguagem (como Date) e até funções.
O JSON só aceita os seguintes tipos de valor:
- string
- number
- boolean
- null
- array
- outro JSON
Por essas limitações que o MongoDB usa o chamado BSON ao invés do JSON para armazenar dados. Além de armazenar o JSON em um formato binário, também adiciona suporte a outros tipos de dados, como:
- integer
- double
- date
- byte array
- objeto BSON
- array BSON
- código JavaScript
- dados binários em MD5
- expressões regulares
Finalizando
Então, quando estamos transferindo dados, estamos falando de JSON, um formato de transferência de dados. Quando o JSON é interpretado por uma linguagem de programação, ele é convertido para um objeto (pode ser C#, Ruby(hash), Python(dictionary), Java, etc). Mesmo que no JavaScript a sintaxe de um objeto literal seja igual, ele não é um JSON.