Executando verificação de segurança...
5

O Que É JSON?

Em resumo, JSON é um formato leve de troca de informações entre sistemas e a ideia deste artigo é desmistificar um pouco sobre O Que É JSON?

No geral, JSON é um formato de arquivo, com padrão aberto, que traz as características de ser simples, leve, confiável e universal.

Existem conceitos que serão importantes entender para compreender o que é JSON, continue lendo para entender melhor estes pontos e não deixe de interagir comentando o que você sabe sobre este excelente assunto.

JSON significa JavaScript Object Notation e foi derivado do JavaScript, mas passou a ser um formato livre, imparcial e leve para qualquer linguagem de programação gerar, converter e manipular os dados com JSON, como: JSON em .net/C#, JSON em JavaScript, JSON em Java, JSON em Python, JSON em Zig.

Muitos artigos costumam comparar JSON com XML ou com YAML, o que não acho uma boa ideia, pois ambos tem usos diferentes... podemos falar destes tópicos em outro artigo, que tal? 😉

O JSON é um formato com bom tempo de maturidade! De acordo com a Wikipedia:

Douglas Crockford originalmente específicou o formato JSON por volta dos anos 2000. Ele e a Chip Morningstar enviaram a primeira mensagem JSON em Abril de 2001.

É muito utilizado por aplicações e serviços na web, porque pode estruturar informações da maneira mais compacta do que pelo modelo XML, tendo uma análise mais rápida dessas informações, permitindo que estes serviços possam analisar, gerar, transformar e consultar as informações no formato JSON.

As qualidades já ditas aqui trazem a ideia do porque o JSON tem sido adotado por empresas bem estabelecidas no mercado como o Google, Facebook e Twitter, cujas aplicações precisam transmitir grandes volumes de dados através de APIs... Falo um pouco sobre APIs em O Que É Uma API?.

Hoje em dia temos outras tecnologias que estão se estabelecendo e crescendo cada vez mais no uso das pessoas/empresas, como GraphQL, RPC, etc... Mas estes tópicos também ficarão para os próximos artigos 😋

Exemplos

Uma empresa necessita que as informações de um usuário que está no CRM A esteja disponível no ERP B e também no Banco de Dados C, como transitar essas informações? Como representar as informações deste usuário? Segue um exemplo de como ficaria em JSON:

{
    "id": 1,
    "nome": "Victor Manhani",
    "programador": true,
    "contaSalario": 13.58,
    "coresPreferidas": ["Vermelho", "Azul", "Preto", "Branco"],
    "frutaPreferida": "Açaí"
}

Eis um exemplo emprestado do Wikipedia sobre um objeto descrevendo uma Pessoa:

{
     "firstName": "John",
     "lastName": "Smith",
     "age": 25,
     "address": {
        "streetAddress": "21 2nd  Street",
        "city": "New York",
        "state": "NY",
        "postalCode": 10021
     },
     "phoneNumbers": [
        {
            "type": "home",
            "number": "212  555-1234"
        },
        {
            "type": "fax",
            "number": "646  555-4567" 
        }
     ] 
}

Características

O arquivos json tem a extensão .json, por exemplo: pessoa.json.

O MIME Type para o JSON é application/json.

O JSON Schema especifica um formato baseado em JSON para definir um contrato da estrutura de dados JSON e é usado para validação, documentação e controle de interação. Ele fornece um contrato para os dados JSON exigidos por um determinado aplicativo e como esses dados podem ser modificados.

O Json é composto por alguns tipos de dados, tipos primitivos e tipos estruturados. São eles:

Strings

  • Uma string é uma sequência de zero ou mais caracteres unicode (especiais ou normais) entre aspas duplas.
  • Exemplo:
"Hello World, Json!"

Numbers

  • Aceitam integers e floats.
  • Integers são números naturais positivos e/ou negativos.
  • Floats são números racionais positivos e/ou negativos com ponto flutuante, separados por . (ponto).
  • Exemplo:
100

ou

100.12

Booleanos

  • São os valores: true (Verdadeiro) ou false (Falso).
  • Exemplo:
true

Objetos

  • Um objeto é uma coleção não ordenada de zero ou mais pares de nomes/valores separados por , (vírgula).
  • Cada objeto é descrito entre as () (chaves).
  • Cada objeto tem sua composição de chave e valores separados por : (dois pontos).
  • Exemplo:
{
    "key": "value"
}

Listas

  • Uma lista é uma sequência ordenada de zero ou mais valores.
  • Exemplo:
["Açaí", 10, true, null, 13.71, {"preco": 29.66}]

Nulos

  • São valores vazios.
  • Exemplo:
null

Encoding

  • O JSON tem a possibilidade de aceitar caracteres especiais como emojis.
  • O JSON em um ecossistema aberto deve ser codificado em UTF-8.
  • Exemplo:
{ "face": "😐" }
// or
{ "face": "\uD83D\uDE10" }

Vantagens do JSON

  • Baseado em texto
  • Formato leve para troca de dados
  • Leitura simples para humanos
  • Análise mais fácil
  • Independe de qualquer idioma
  • Padronização na comunicação
  • Suporte a objetos
  • Velocidade na execução e transporte dos dados
  • Arquivo com o tamanho reduzido
  • Pode representar a vida real
    • Por exemplo, podemos representar as características de um carro dessa maneira:
{
    "id": 1,
    "Modelo": "Celta",
    "Placa": "!!!@@@@",
    "cor": "Preto",
    "Km": 1127.05
}

Desvantagens

  • Não é totalmente seguro.
    • Pois é apenas um arquivo de texto trafegando pela web.
  • É limitado em termos dos tipos de dados suportados.
  • Não tem tipos de datas.
    • Por exemplo 2022-07-07, só pode ser representado por string.
  • Não tem comentários.
  • Verboso.
    • Por mais simples que possa parecer, o JSON não é o formato mais simples, existem outros como YAML.
  • Não tem namespace.
    • Os namespaces tem o objetivo de qualificar elementos de um XML para evitar conflitos entre elementos de mesmo nome.

Minha Definição de JSON

Eu defino o JSON como o que preciso para me comunicar entre dois ou mais sistemas com facilidade, manter organização na comunicação entre estes sistemas e claro, aumentar a velocidade que essas informações trafegam.

Curiosidade

Existe uma ferramenta com a proposta de facilitar ainda mais a leitura de JSON para humanos e ela é a HJson, vale a pena conferir! 😲

Recomendações

  • Tutorial de JSON: w3schools é uma excelente plataforma para aprender sobre JSON, contendo bastante tutoriais, referências e exemplos facilitados.

  • JSON Crack Editor: Neste site você irá ter a visualão do JSON em fluxos ou nós, exportar imagem do json, editar de forma específica... é uma ferramenta extremamente útil!

  • Json Formatter: Essa ferramenta espera resolver o problema formatando e embelezando os dados JSON para que sejam fáceis de ler e ser depurados por seres humanos.

  • JSON Viewer: Essa ferramenta irá possibilitar a leitura e a visualização do seu JSON em nós ou items e é muito útil para quando o assunto for analisar um grande arquivo JSON.

  • JSON Schema Validator: Este site irá permitir a validação do seu JSON com seu JSON Schema.

  • Extensão do Google Chrome - JSON Viewer De acordo com o google:

O marcador JSON/JSONP mais bonito e personalizável que seus olhos já viram.

  • JSON Generator: Você já precisou criar dados simulados para testes de API ou script? Criar um único registro de dados estruturados fakes não é tão difícil. Mas fazê-lo em escala, digamos, milhares de registros pode ser uma tarefa assustadora. Entre no JSON Generator, uma ferramenta que lida com o trabalho pesado para gerar objetos JSON estruturados, repletos de dados aleatórios sequenciados e/ou controláveis. Experimente também a próxima geração do JSON Generator.

  • JSON Schema Generator: Serviço para converter json para json schema.

  • JSON Selector Generator: Você pode copiar e colar um JSON, clique em processar e após isso clique em qualquer dado e esta ferramenta lhe dirá qual seletor usar em JavaScript para acessar esses dados.

  • JSONBin: Se você quer armazenar e disponibilizar seu JSON na web, este site traz essa solução, se classificando como Uma loja JSON pessoal como um serviço RESTful.

  • MyJson: Se você quer armazer um JSON de forma pública para consumir através de suas aplicações, confira o MyJson e o site JsonServe que trazem este tipo de funcionalidade.

  • JSON:API: Uma especificação para construir APIs em JSON.

Chamada Para Ação

E para você, o que é e o que define o JSON?

Deixe nos comentários qualquer outra recomendação de ferramentas, linguagens, repositórios, tutoriais ou situações sobre JSON. 😁

Referências

Carregando publicação patrocinada...
3

Vale lembrar que as normas atuais (RFC 8259 e ECMA 404) definem que qualquer JSON Value é um JSON válido.

Ou seja, se eu tiver apenas 42, "Fulano" ou true, todos esses são JSON's válidos (uma API Web que retorne somente isso é perfeitamente válido e tecnicamente correto).

Eu sei que hoje em dia a esmagadora maioria das API's Web retorna um objeto, mas isso não quer dizer que é a única possibilidade. Nada impede que eu retorne apenas um número, uma string, um booleano ou um array.

O exemplo clássico (que eu já vi por aí) é, por exemplo, uma API que tem a URL /users retornando algo como:

{
    "usuário 0": { "nome": "Fulano", "idade": 42 },
    "usuário 1": { "nome": "Ciclano", "idade": 20 },
    "usuário 2": { "nome": "Beltrano", "idade": 30 }
}

Só que as chaves "usuário X" não acrescentam nenhuma informação relevante - se a URL é /users, eu já sei que ela retorna dados de usuários, então o retorno poderia muito bem ser um array:

[
    { "nome": "Fulano", "idade": 42 },
    { "nome": "Ciclano", "idade": 20 },
    { "nome": "Beltrano", "idade": 30 }
]

A própria API do TabNews faz isso: ao acessar https://www.tabnews.com.br/api/v1/contents, o retorno é um array de objetos (repare que começa com [).

Outro exemplo seria uma URL como /users/quantidade que retorna a quantidade de usuários. Em vez de retornar { "quantidadeUsuarios": 42 }, por que não retornar apenas 42? Afinal, a URL já indica que é a quantidade de usuários, não tem porque trafegar informação redundante.

3

Conteúdo muito completo, JSON é sensacional e para mim é a cola que gruda grande parte da internet! 🤝

E gostaria de esclarecer uma confusão que eu fazia no passado (e as vezes faço até hoje), entre um JSON e um Objeto JavaScript.

Aspas duplas

No JavaScript, o código abaixo é válido:

{
  nome: "Filipe",
  sobrenome: "Deschamps"
}

Mas não confunda, isso é um JSON inválido! Olha só que interessante:

Validar JSON

Então em um Objeto JavaScript, enquanto a chave pode ser escrita sem aspas duplas, no JSON é mandatório você colocar as aspas. Usando novamente o exemplo acima e transformando ele num JSON válido:

{
  "nome": "Filipe",
  "sobrenome": "Deschamps"
}

E este JSON também é um Objeto JavaScript válido.

Eu trouxe isso para cá, porque muitas vezes no passado em clients REST como o Postman, Insomnia ou Thunder Client, eu começava a digitar um objeto sem as aspas e me confundia um pouco porque o client estava reclamando e apontando como um JSON inválido:

JSON inválido

Dangling comma

Outra confusão nisso é um JSON com Dangling Comma, que é manter uma vírgula , adicional na última linha. Então voltando ao mesmo exemplo, eu adicionei uma vírgula na última linha e isso é um Objeto JavaScript válido:

{
    "nome": "Filipe",
    "sobrenome": "Deschamps",
}

Porém é um JSON inválido! Nota que o Thunder Client reclama que a linha 4 é inválida, isso por conta da linha 3 estar sendo finalizada com um caracter que faz esperar outra coisa na linha 4 (faz esperar um novo par de "chave" e algum valor):

JSON com Dangling Comma

JSON inválido


Espero ter contribuído um pouco com essa publicação que já foi sensacional de largada e eu fico especialmente feliz poder publicar coisas assim num espaço que está se tornando tão massa 🤝 👍

2

Felipe, sensacional sua contribuição! Muito obrigado por relembrar estes detalhes e com certeza tem vários outros como o json aceitar carriage return e ele poder ser indentado ou não. São detalhes e contribuições como essas que fazem qualquer conteúdo aqui ser rico e valoroso tanto para iniciantes quanto para experientes no mundo da tecnologia! Muito obrigado mais uma vez e que o JSON esteja com você, assinado JS 🤣😂

-1