Skip to content

Capítulo 1.3: Formato JSON

Tempo de estudo: 35 minutos


1. JSON: A Linguagem da Comunicação Espacial

Imagine que uma sonda espacial e o Centro de Controle da Missão falem idiomas diferentes. JSON (JavaScript Object Notation) é uma linguagem de dados universal, compreendida por humanos e máquinas. Como a linguagem internacional dos astronautas!

Principais propriedades:

  • 🪶 Leve: transmissão rápida mesmo com sinal fraco
  • 👀 Legível por humanos: a estrutura é visível a olho nu
  • 🔄 Universal: suportado por todas as linguagens de programação

💡 Analogia Espacial:

JSON é como um telegrama digital com dados sobre estrelas. Em vez de código Morse, estruturas claras {chave: valor}.


2. Anatomia de uma Mensagem JSON

JSON consiste em dois tipos de estruturas:

A. Objetos (Naves Espaciais)

{
  "name": "Voyager-1",
  "launch_year": 1977,
  "is_active": true,
  "position": [-19.1, 42.7, 0.3]
}

B. Arrays (Aglomerados Estelares)

[
  {"name": "Sirius", "magnitude": -1.46},
  {"name": "Canopus", "magnitude": -0.74},
  {"name": "Arcturus", "magnitude": -0.05}
]

⚡ Regras de sintaxe:

  • Chaves entre aspas " "
  • Valores: strings, números, booleanos (true/false), null
  • Dados separados por vírgulas
  • Chaves {} para objetos, colchetes [] para arrays

3. JSON vs XML: A Batalha dos Formatos

Parâmetro JSON (Satélite Moderno) XML (Telescópio Antigo)
Legibilidade Alta (acesso direto aos campos) Baixa (tags <planet>...</planet>)
Tamanho Compacto Volumoso (+30% ao tamanho)
Processamento Rápido Lento
Exemplo {"planet": "Mars"} <planet>Mars</planet>

🔭 Por que JSON venceu no espaço?

APIs da NASA, SpaceX e ESA usam JSON — é ideal para transmissão de dados!


4. Trabalhando com JSON em Código

Exemplo Python (obtendo dados sobre a Lua):

import requests
import json

# Usamos uma API real, por exemplo, para obter dados do Sistema Solar
# da The Solar System OpenData API
try:
    response = requests.get("https://api.le-systeme-solaire.net/rest/bodies/terre")
    response.raise_for_status() # Verifica por erros HTTP (4xx, 5xx)

    planet_data = response.json()

    print(f"Nome: {planet_data['englishName']}")
    print(f"Luas: {[moon['moon'] for moon in planet_data['moons']]}")

    # Converte o dicionário Python em uma string JSON para salvar
    planet_json_str = json.dumps(planet_data, indent=2, ensure_ascii=False) # ensure_ascii=False para caracteres cirílicos
    print("\n--- JSON Formatado ---")
    print(planet_json_str)

except requests.exceptions.RequestException as e:
    print(f"Erro na requisição: {e}")

Exemplo JavaScript (processamento de dados do telescópio):

const Data = `{
  "id": "terre",
  "name": "La Terre",
  "englishName": "Earth",
  "isPlanet": true,
  "moons": [
    {
      "moon": "La Lune",
      "rel": "https://api.le-systeme-solaire.net/rest/bodies/lune"
    }
  ],
  "semimajorAxis": 149598023,
  "perihelion": 147095000,
  "aphelion": 152100000,
  "eccentricity": 0.0167,
  "inclination": 0,
  "mass": {
    "massValue": 5.97237,
    "massExponent": 24
  },
  "vol": {
    "volValue": 1.08321,
    "volExponent": 12
  },
  "density": 5.5136,
  "gravity": 9.8,
  "escape": 11190,
  "meanRadius": 6371.0084,
  "equaRadius": 6378.1366,
  "polarRadius": 6356.8,
  "flattening": 0.00335,
  "dimension": "",
  "sideralOrbit": 365.256,
  "sideralRotation": 23.9345,
  "aroundPlanet": null,
  "discoveredBy": "",
  "discoveryDate": "",
  "alternativeName": "",
  "axialTilt": 23.4393,
  "avgTemp": 288,
  "mainAnomaly": 358.617,
  "argPeriapsis": 85.901,
  "longAscNode": 18.272,
  "bodyType": "Planet"
}`;

const dataObj = JSON.parse(Data);
console.log(dataObj.target);


5. Validação JSON: Verificando o "Sinal"

Antes de usar os dados, certifique-se de que o JSON:

  1. Tem a estrutura correta (verifique os parênteses/chaves!)

  2. Contém os campos esperados

  3. Não possui erros de sintaxe

Ferramentas: - JSONLint (como um detector de lixo espacial para JSON) - Parsers de linguagem integrados (irão lançar um erro se o formato estiver incorreto)

⚠️ Exemplo de erro:

{"planet": "Mars" → Sem chave de fechamento!

Solução: Sempre use json.loads() no Python ou JSON.parse() no JS para verificação.


Quiz para fixação

1. JSON significa...

2. Como um objeto é representado em JSON:

3. O que NÃO é um valor válido em JSON?

4. Por que JSON é melhor que XML para APIs espaciais?

5. Como converter uma string JSON em um objeto Python?


🚀 Resumo do capítulo:

JSON é o "Esperanto espacial" do mundo das APIs. Conhecendo sua estrutura, você será capaz de:

  • 📡 Receber dados de telescópios e sondas

  • 🔧 Converter informações entre sistemas

  • 🛰️ Salvar dados científicos em arquivos

Prepare-se para a acoplagem! No próximo capítulo, exploraremos a arquitetura REST API — o sistema de gerenciamento da "estação espacial" do seu servidor.

📌 Prática: Acesse NASA Open APIs, encontre a API de asteroides (Asteroids NeoWs) e estude a estrutura JSON na resposta!