JSON: Uma Visão Abrangente sobre o Formato de Dados Interchange
Tags: json, datastructures
Published: 2024-04-25 20:02:53

JSON é a abreviação de "*JavaScript Object Notation*", caso esse seja um conceito recente para você, não se assuste com o nome grande, é na verdade bem simples de entender.

Em sua essência, JSON é um formato de dados leve, com interoperabilidade ampla e de fácil legibilidade, tanto por seres humanos quanto por máquinas. 

Desde sua primeira especificação por *Douglas Crockford* nos anos 2000, tornou-se uma escolha popular para troca e armazenamento de dados, e vem substituindo cada vez mais o formato padrão até então, o XML.

Neste artigo, pretendo explorar os fundamentos do JSON, suas características, aplicações e algumas técnicas um pouco mais avançadas para manipulação eficiente de dados.

## Uma Breve História

O objetivo por trás da criação do JSON era ser uma alternativa simples e leve ao XML para a troca de dados entre diferentes sistemas e linguagens de programação, mas especialmente para comunicação entre clientes web e servidores.

*Crockford* percebeu que, embora o XML fosse amplamente utilizado para representar e trocar dados estruturados, ele tinha algumas desvantagens significativas, incluindo uma sintaxe mais complexa e uma sobrecarga maior em termos de tamanho de arquivo e processamento.

Inspirado pela sintaxe de objetos literais em *JavaScript*, o JSON foi formalizado pela primeira vez em 2006, quando *Crockford* publicou a especificação oficial no site [json.org](https://www.json.org/json-pt.html).

Hoje em dia, o JSON é amplamente utilizado em uma variedade de contextos, desde comunicação entre cliente e servidor, em aplicativos web, até representação de dados em bancos de dados NoSQL e Web APIs. Então quando você acessa alguma aplicação na web é altamente provável que ela esteja fazendo uso do JSON.

## Estrutura de dados com JSON

O JSON representa dados estruturados no formato de objetos com pares de **chave-valor**. Ele é independente de linguagem, e pode ser compreendido e manipulado nativamente por uma variedade de linguagens de programação. Como por exemplo: Ruby, Python, PHP, JavaScript…Mas mesmo para as linguagens que não aceitam o JSON nativamente, no site oficial da especificação existem inúmeras bibliotecas que fazem o parser para essas linguagens.

A estrutura de um JSON consiste principalmente em objeto `{}` e array `[]`. Um JSON, deve sempre começar com abre chaves `{` e terminar com fecha chaves `}`.

Os dados são armazenados dentro do JSON por pares de `“nome”: “valor”` e então separados por vírgula.

exemplo simples de um **objeto JSON**:

```json
{
  "nome": "João",
  "idade": 21,
  "solteiro": false,
  "amigos": ["Robson", "Jorge", "Maria"]
}
```

Esse conjunto de informações é chamado de **objeto**. O valor de um **objeto JSON** pode conter: `string`, `number`, `boolean`, `array`, `object` ou `null`.

Observe a propriedade `amigos`, que contém um **array** como valor, um **array JSON** é uma coleção ordenada de valores, onde cada valor pode ser qualquer tipo de dado, assim como o **objeto JSON**, incluindo outros arrays ou objetos.

## Aplicações de JSON

JSON é amplamente utilizado em uma variedade de contextos, incluindo:

- Comunicação entre cliente e servidor em aplicativos web e móveis.
- Armazenamento de configurações e preferências de usuário.
- Intercâmbio de dados entre sistemas distribuídos e Web APIs.
- Representação de dados em bancos de dados NoSQL, como o MongoDB.
- Arquivos de configuração

## Concorrentes

JSON não é o único no mercado de serialização de dados, seus principais concorrentes são:

- **YAML**

Segundo o website oficial: "YAML é uma serialização de dados amigável para humanos e padrão para todas as linguagens de programação".

Exemplo da estrutura YAML:

```yaml
library:
  - title: "The Great Gatsby"
    author: "F. Scott Fitzgerald"
    genre: "Novel"
    year: 1925
  - title: "To Kill a Mockingbird"
    author: "Harper Lee"
    genre: "Fiction"
    year: 1960
```

Geralmente, quando alguma ferramenta faz uso de arquivo de configuração, esse esquivo será feito em JSON ou YAML.

- **XML**

O já citado antecessor ao JSON em relação a dominância de mercado, foi perdendo popularidade por ser muito menos intuitivo em termos de leitura, além da sobrecarga de processamento.

Exemplo da estrutura XML:

```xml 
<?xml version="1.0" encoding="UTF-8"?>
<library>
  <book>
    <title>The Great Gatsby</title>
    <author>F. Scott Fitzgerald</author>
    <genre>Novel</genre>
    <year>1925</year>
  </book>
  <book>
    <title>To Kill a Mockingbird</title>
    <author>Harper Lee</author>
    <genre>Fiction</genre>
    <year>1960</year>
  </book>
</library>
```

Apesar da adoção do JSON pela maioria, o XML ainda é muito usado para atender melhor a demanda de dados mais completos, é comum o banco de dados utilizar XML como formato de armazenamento.

## Normalização de Dados com JSON

Na ciência da computação existe um termo chamado “*tipos de dados complexos*”, e podemos ver o JSON basicamente como uma forma de organizar e estruturar dados complexos de maneira hierárquica e legível.

Um exemplo de tipos de dados complexo utilizado no JSON é o objeto, ou o array, por exemplo.

Ok, mas o tópico é sobre normalização de dados, certo? A questão é que embora tipos de dados complexos possam oferecer flexibilidade e profundidade aos seus dados, também podem surgir irregularidades e discrepâncias se os dados não forem estruturados e padronizados adequadamente.

E é aí que a normalização de dados entra, esse é o processo de organizar dados em uma estrutura que minimize a redundância e facilite a consulta e atualização dos mesmos. No contexto de JSON, isso geralmente é feito dividindo os dados em várias partes relacionadas e usando ***IDs*** para referenciá-las.

Por exemplo, este é um conjunto de dados JSON que representa informações sobre livros e autores:

```json
{
  "livros": [
    {
      "id": 1,
      "titulo": "Dom Casmurro",
      "autor": "Machado de Assis"
    },
    {
      "id": 2,
      "titulo": "Memórias Póstumas de Brás Cubas",
      "autor": "Machado de Assis"
    }
  ],
  "autores": [
    {
      "id": 1,
      "nome": "Machado de Assis",
      "nacionalidade": "Brasileiro"
    }
  ]
}
```

Neste exemplo, cada livro contém o nome do autor. Isso pode resultar em redundância se o mesmo autor tiver escrito vários livros. Em vez disso, podemos normalizar os dados dividindo os livros e os autores e referenciando os autores pelos ***IDs***:

```json
{
  "livros": [
    {
      "id": 1,
      "titulo": "Dom Casmurro",
      "autor_id": 1
    },
    {
      "id": 2,
      "titulo": "Memórias Póstumas de Brás Cubas",
      "autor_id": 1
    }
  ],
  "autores": [
    {
      "id": 1,
      "nome": "Machado de Assis",
      "nacionalidade": "Brasileiro"
    }
  ]
}
```

Essa abordagem economiza espaço e simplifica a atualização de informações do autor. Além disso, permite consultas mais eficientes, especialmente em conjuntos de dados grandes, pois os autores agora são referenciados por IDs únicos.

## Conclusão

Obrigado por chegar até aqui, caro leitor! Fico feliz por termos explorado os conceitos essenciais do JSON, desde sua origem até sua ampla adoção juntos. Além de abordar os fundamentos, discutimos também tópicos comumente menos abordados, como a normalização de dados. Compreender esses aspectos é crucial para criar soluções eficientes e escaláveis nos seus projetos.

Por último, vou recomendar algo que me ajudou muito, anos atrás durante o meu começo na área de desenvolvimento de software. Saber que se seu JSON é válido e está correto é muito importante, às vezes deixamos escapar pequenas coisas por conta do olhar viciado. O site JASONlint valida seu JSON, confere se há erros, seja de estrutura, tipo de dados etc…

Bons estudos e que a sorte esteja sempre ao seu favor!


![Jogos Vorazes](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vum859m7qe4oul5qf9rk.gif)

## Referências

- [Zeno Rocha - XML pra quê? Conheça o JSON e o YAML](https://zenorocha.com/xml-pra-que-conheca-o-json-e-o-yaml/)
- [Henrique Marques Fernandes - O que é JSON e para que serve?](https://dev.to/shadowlik/o-que-e-json-e-para-que-serve-2eg7)
- [Código Fonte TV - JSON // Dicionário do Programador](https://www.youtube.com/watch?v=P81dE-tkaaA&t=29s)