O que é JSON (Javasript Object Notation) e como usamos ?
Tags: beginners, braziliandevs, json, programming
Published: 2024-06-21 18:33:39

É bastante comum pra galera que ta começando na programação ficar um pouco perdido com muitos **acronismos** nas primeiras semanas. Hoje, vamos dar uma passada sobre algo que é muito comum no dia a dia da nossa profissão e que é bem fácil de pegar as manhas, pode confiar!! Neste artigo, vamos explicar o que significa a sigla JSON, como pode ser usado, como é a estrutura dele e muito mais! Bora lá?

## Índice
- [O que é JSON afinal?](#o-que-é-json-afinal)
- [Já não existia uma forma de transportar dados assim antes?](#já-não-existia-uma-forma-de-transportar-dados-assim-antes)
- [Qual é a diferença entre JSON e XML?](#qual-é-a-diferença-entre-json-e-xml)
- [Ainda vale a pena usar XML?](#ainda-vale-a-pena-usar-xml)
- [Vantagens do JSON](#vantagens-do-json)
  * [Sintaxe JSON](#sintaxe-json)
  * [Tipos de Dados JSON](#tipos-de-dados-json)
- [Exemplo prático com Carros](#exemplo-prático-com-carros)
  * [Trabalhando com JSON em JavaScript](#trabalhando-com-json-em-javascript)
  * [Trabalhando com JSON em Python](#trabalhando-com-json-em-python)
  * [Trabalhando com JSON em PHP](#trabalhando-com-json-em-php)
  * [Trabalhando com JSON em Java](#trabalhando-com-json-em-java)

## O que é JSON afinal?
O **JSON** ou "JavaScript Object Notation" é um formato básico para transportar dados, criado em 2000. Mas ao ler o nome, você pode se perguntar:

> "Se tem JavaScript no nome, então só posso usá-lo com JavaScript, certo?" - Você, 2024

Não exatamente, pelo fato, de ser um formato leve e simples, ele é fácil de ser lido por outras linguagens e, o mais importante, por pessoas.

> "Bem, se é uma maneira leve e simples de transportar dados, então vou usá-lo como um banco de dados." - Você, 2024

Eu não recomendaria...

Por quê? Bom, embora o JSON seja ótimo para transportar dados por causa de sua simplicidade e legibilidade, usá-lo como banco de dados pode não ser a melhor ideia. Arquivos JSON não são projetados para lidar com grandes quantidades de dados de forma eficiente. Eles não possuem recursos de indexação, consulta e transações como bancos de dados SQL (como MySQL e PostgreSQL) ou bancos de dados NoSQL (como MongoDB e ScyllaDB). Usar JSON como banco de dados pode levar a problemas de desempenho, integridade de dados e desafios na gestão de acesso concorrente aos dados.

## Não existia uma forma de transportar dados assim antes?
Claro que sim. A principal linguagem usada era o XML (Extensible Markup Language), projetada para ser uma linguagem de marcação flexível e personalizável. Embora seja poderosa e altamente extensível, pode ser bastante verbosa, dificultando sua legibilidade. Cada pedaço de dado no XML é cercado por tags, o que pode aumentar o tamanho do arquivo e a complexidade, especialmente em documentos maiores ou conjuntos de dados.

## Qual é a diferença entre JSON e XML?
JSON e XML são ambos formatos de serialização de dados. JSON é mais conciso, o que o torna mais fácil de ler e mais rápido de analisar, sendo bem adaptado às estruturas de dados das linguagens de programação modernas. O XML, por outro lado, é mais verboso com o uso de tags explícitas de início e fim, suportando uma estrutura hierárquica mais complexa adequada para aplicações que exigem metadados detalhados. Enquanto o JSON é preferido para APIs Web devido à sua eficiência, o XML é preferido em ambientes que requerem marcação extensiva de documentos, como aplicações empresariais.

Da uma olhadinha nesse exemplo em XML para comparação:

```xml
<livraria>
  <livro>
    <titulo>Aprendendo XML</titulo>
    <autor>Erik T. Ray</autor>
    <preco>29.99</preco>
  </livro>
  <livro>
    <titulo>JSON para Iniciantes</titulo>
    <autor>iCode Academy</autor>
    <preco>39.95</preco>
  </livro>
</livraria>
```

E agora temos esse mesmo exemplo, mas agora no formato JSON:

```json
{
  "livraria": {
    "livros": [
      {
        "titulo": "Aprendendo XML",
        "autor": "Erik T. Ray",
        "preco": 29.99
      },
      {
        "titulo": "JSON para Iniciantes",
        "autor": "iCode Academy",
        "preco": 39.95
      }
    ]
  }
}
```

## Ainda vale a pena usar o XML?
Bom, vai depender do seu objetivo, mas na minha opinião, sempre vale a pena dar uma olhada em alguma coisa que você não conhece, mesmo que você não pretenda usar, só para ter uma ideia do que é e como é usado. Você pode se deparar com um problema que o XML pode resolver um dia, vai saber.

## Vantagens do JSON
Então, como você já viu, a principal razão para usar JSON é sua legibilidade, mas vamos listar suas principais vantagens:
- **Fácil de Ler**: JSON tem uma estrutura clara e direta.
- **Fácil de Parsear**: Sua sintaxe simples facilita a na hora de converter.
- **Compacto**: JSON tende a ser mais leve, economizando espaço e largura de banda.
- **Universal**: Amplamente suportado por várias linguagens de programação e plataformas, usado por grandes empresas como Google e Twitter.

### Sintaxe JSON
A sintaxe JSON é direta e sem muito segredo, seguindo algumas regras básicas:

1. **Dados em pares de nome/valor**: Cada elemento de dado em JSON é representado como um par de chave (ou nome) e valor, separados por dois pontos.
2. **Dados separados por vírgulas**: Múltiplos pares de chave-valor dentro de um objeto são separados por vírgulas.
3. **Objetos são envoltos por chaves**: Um objeto em JSON é cercado por chaves `{}`.
4. **Arrays são envoltos por colchetes**: Um array em JSON é cercado por colchetes `[]`.

Mas é mais fácil visualizar do que ler, então aqui estão alguns exemplos para você, junto com a definição de cada tipo:

### Tipos de Dados JSON
JSON suporta os seguintes tipos de dados:

- **String**: Uma sequência de caracteres, cercada por aspas duplas.
  `"nome": "João Silva"`
- **Número**: Valores numéricos, podem ser inteiros ou de ponto flutuante.
  `"idade": 30`
- **Objeto**: Uma coleção de pares chave-valor, cercados por chaves.
  `"endereço": { "rua": "Rua Principal", "cidade": "Cidade Exemplo" }`
- **Array**: Uma lista ordenada de valores, cercada por colchetes.
  `"cursos": ["Matemática", "Ciências", "História"]`
- **Boolean**: Valores verdadeiro ou falso.
  `"éEstudante": false`
- **Null**: Representa um valor nulo.
  `"nomeDoMeio": null`

E não, você não pode escrever comentarios em arquivo um JSON :D

## Exemplo prático com Carros
Vamos dizer que você quer manter registros de carros e seus detalhes. Aqui está um exemplo de como esses registros podem ser organizados em JSON:

```json
{
  "carros": [
    {
      "marca": "Toyota",
      "modelo": "Corolla",
      "ano": 2020,
      "características": {
        "cor": "Azul",
        "transmissão": "Automática"
      }
    },
    {
      "marca": "Toyota",
      "modelo": "Corolla",
      "ano": 2021,
      "características": {
        "cor": "Vermelha",
        "transmissão": "Automática"
      }
    }
  ]
}
```

Se você quiser adicionar mais carros, basta adicionar mais objetos ao array de carros na estrutura JSON.

E isso pode ser facilmente feito analisando o JSON em uma linguagem de sua escolha e, em seguida, manipulando-o como desejar. Aqui estão alguns exemplos usando o JSON mostrado anteriormente para dar uma ideia melhor de como ler e analisar um arquivo JSON:

### Trabalhando com JSON em JavaScript

```javascript
const fs = require('fs').promises

const jsonPath = 'C:docs/example/example.json'
const readJsonFile = async () => {
  // Lê o conteúdo do JSON e garante que seja lido como uma string
  const jsonContent = await fs.readFile(jsonPath, 'utf-8')
  // Converte o JSON em um objeto JavaScript
  const data = JSON.parse(jsonContent)
  
  console.log(data.carros[0])
  // Saída: { marca: "Toyota", modelo: "Corolla", ano: 2020, características: { cor: "Azul", transmissão: "Automática" } }

  console.log(data.carros[1])
  // Saída: { marca: "Toyota", modelo: "Corolla", ano: 2021, características: { cor: "Vermelha", transmissão: "Automática" } }
}

readJsonFile()
```

### Trabalhando com JSON em Python

```python
import json  

# Lê o arquivo JSON
with open('C:docs/example/example.json', 'r') as jsonFile:  
    # Analisa o conteúdo do JSON
    jsonContent = json.load(jsonFile)  

print(jsonContent['carros'][0])  
# Saída: {'marca': 'Toyota', 'modelo': 'Corolla', 'ano': 2020, 'características': {'cor': 'Azul', 'transmissão': 'Automática'}}  
print(jsonContent['carros'][1])  
# Saída: {'marca': 'Toyota', 'modelo': 'Corolla', 'ano': 2021, 'características': {'cor': 'Vermelha', 'transmissão': 'Automática'}}
```

### Trabalhando com JSON em PHP

```php
<?php  
$jsonPath = 'C:docs/example/example.json';  
// Lê o conteúdo do JSON
$contents = file_get_contents($jsonPath);  

// Converte o conteúdo do JSON em um Objeto PHP
$jsonContent = json_decode($contents);  

print_r($jsonContent->carros[1]);  
// Saída: stdClass Object  
// (  
//    [marca] => Toyota  
//    [modelo] => Corolla  
//    [ano] => 2021  
//    [características] => stdClass Object  
//        (  
//            [cor] => Vermelha  
//            [transmissão] => Automática  
//        )  
// )
?>
```

### Trabalhando com JSON em Java

```java  
package org.example;  
import org.json.JSONArray;  
import org.json.JSONObject;  

import java.io.IOException;  
import java.nio.charset.StandardCharsets;  
import java.nio.file.Files;  
import java.nio.file.Paths;  

public class Main {  
    public static void main(String[] args) throws IOException {  
        String jsonFilePath = "C:docs/example/example.json";  
        // Lê o conteúdo do arquivo e converte em uma string
        String jsonContent = Files.readString(Paths.get(jsonFilePath), StandardCharsets.UTF_8);  

        // Converte o conteúdo da string em um Objeto JSON
        JSONObject jsonExample = new JSONObject(jsonContent);  

        JSONArray carros = jsonExample.getJSONArray("carros");  

        System.out.println(carros.get(0));  
        // Saída: {"características": {"transmissão":"Automática","cor":"Azul"},"ano":2020,"modelo":"Corolla","marca":"Toyota"}  
        System.out.println(carros.get(1));  
        // Saída: {"características":{"transmissão":"Automática","cor":"Vermelha"},"ano":2021,"modelo":"Corolla","marca":"Toyota"}  
    }  
}
```

PS: O exemplo em Java usa uma [biblioteca json](https://mvnrepository.com/artifact/org.json/json). Se você for testá-lo, certifique-se de incluí-la nas suas dependências.

## Conclusão
Entender JSON pode parecer complicado no começo, mas na verdade é muito simples quando você pega o jeito! Demos uma passada sobre o que é JSON, como é usado e por que é tão útil.

Desde entender sua sintaxe até vê-lo em ação em diferentes linguagens de programação, agora você está pronto para dar os primeiros passos e começar a usar JSON em seus projetos.

Se você ainda tiver alguma dúvida, sinta-se à vontade para me perguntar diretamente. Espero que tenha gostado do artigo - não se esqueça de curtir e compartilhar com aquele amigo que ainda está lutando para entender JSON.

Feedback sobre o artigo são sempre bem-vindos para que eu possa melhorar nos próximos. Obrigado por ler, mantenha-se saudável e beba água!