Pular para o conteúdo principal
InicioTutoriaisPython

Dados JSON em Python

Trabalhando com JSON em Python: Um guia passo a passo para iniciantes
abr. de 2024  · 6 min leer

Introdução

JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados que se tornou uma opção popular para o intercâmbio de dados em muitas linguagens de programação, incluindo Python. Com sua sintaxe simples e capacidade de representar estruturas de dados complexas, o JSON se tornou parte integrante do desenvolvimento moderno da Web, alimentando tudo, desde APIs até aplicativos da Web do lado do cliente. 

Neste tutorial, exploraremos os conceitos básicos do trabalho com JSON em Python, incluindo serialização, desserialização, leitura e gravação de arquivos JSON, formatação e muito mais. Ao final deste tutorial, os leitores poderão:

  • Compreender o JSON e suas vantagens e desvantagens
  • Identificar casos de uso de JSON e compará-lo com alternativas comuns
  • Serialize e deserialize dados JSON de forma eficaz em Python
  • Trabalhar com dados JSON na linguagem de programação Python
  • Formatar dados JSON em Python usando a biblioteca `json
  • Otimizar o desempenho ao trabalhar com dados json
  • Gerencie dados JSON no desenvolvimento de APIs.

O que é JSON?

O JSON (JavaScript Object Notation) é um formato de intercâmbio de dados leve e independente de linguagem que é amplamente adotado e suportado por muitas linguagens e estruturas de programação. É uma boa opção para o intercâmbio de dados quando há necessidade de um formato simples e fácil de ler que suporte estruturas de dados complexas e possa ser facilmente compartilhado entre diferentes programas de computador.

O caso de uso perfeito para JSON é quando há necessidade de trocar dados entre aplicativos baseados na Web, como quando você preenche um formulário em um site e as informações são enviadas a um servidor para processamento. 

O JSON é ideal para esse cenário porque é um formato leve e eficiente que exige menos largura de banda e espaço de armazenamento do que outros formatos, como XML. Além disso, o JSON é compatível com estruturas de dados complexas, como objetos aninhados e matrizes, o que facilita a representação e a troca de dados estruturados entre sistemas diferentes. Alguns outros casos de uso do formato JSON são:

  1. Interface de programação de aplicativos (APIs). O JSON é comumente usado para criar APIs (Interfaces de Programação de Aplicativos) que permitem que diferentes sistemas e aplicativos se comuniquem entre si. Por exemplo, muitas APIs baseadas na Web usam JSON como formato de dados para a troca de dados entre diferentes aplicativos, facilitando a integração com diferentes linguagens de programação e plataformas.
  2. Arquivos de configuração. O JSON oferece um formato simples e fácil de ler para armazenar e recuperar dados de configuração. Isso pode incluir configurações para o aplicativo, como o layout de uma interface de usuário ou as preferências do usuário.
  3. IoT (Internet das Coisas).  Os dispositivos de IoT geralmente geram grandes quantidades de dados, que podem ser armazenados e transmitidos entre sensores e outros dispositivos com mais eficiência usando JSON. 

Processo de solicitação JSON

Exemplo de dados JSON

{
  "name": "John Doe",
  "age": 30,
  "email": "john.doe@example.com",
  "is_employee": true,
  "hobbies": [
    "reading",
    "playing soccer",
    "traveling"
  ],
  "address": {
    "street": "123 Main Street",
    "city": "New York",
    "state": "NY",
    "zip": "10001"
  }
}

Neste exemplo, temos um objeto JSON que representa uma pessoa. O objeto tem várias propriedades: nome, idade, e-mail e is_employee. A propriedade hobbies é uma matriz que contém três strings. A propriedade de endereço é um objeto com várias propriedades próprias, como rua, cidade, estado e CEP.

Observe que os dados JSON normalmente são formatados como uma série de pares de valores-chave, com a chave representada como uma cadeia de caracteres e o valor representado em vários tipos, como cadeia de caracteres, número, booleano, matriz ou objeto.

Vantagens e desvantagens do uso de JSON

Abaixo, selecionamos alguns dos pontos positivos e negativos do uso do JSON. 

Prós de trabalhar com um arquivo JSON:

Algumas das principais vantagens do JSON incluem o fato de ele ser..:

  1. Leve e fácil de ler. Os arquivos JSON são fáceis de ler e entender, mesmo para usuários não técnicos. Eles também são leves, o que significa que podem ser facilmente transmitidos pela Internet.
  2. Interoperável: Os arquivos JSON são interoperáveis, o que significa que podem ser facilmente trocados entre diferentes sistemas e plataformas. Isso ocorre porque o JSON é um formato padrão amplamente suportado, e muitos aplicativos e serviços usam o JSON para intercâmbio de dados. Como resultado, trabalhar com arquivos JSON pode facilitar a integração de diferentes partes de um sistema ou o compartilhamento de dados entre diferentes aplicativos.
  3. Fácil de validar: Os arquivos JSON podem ser facilmente validados em relação a um esquema para garantir que estejam em conformidade com uma estrutura específica ou um conjunto de regras. Isso pode ajudar a detectar erros e inconsistências nos dados logo no início, o que pode economizar tempo e evitar problemas no futuro. Os esquemas JSON também podem ser usados para gerar automaticamente a documentação dos dados armazenados no arquivo JSON.

Contras de trabalhar com um arquivo JSON:

  1. Suporte limitado a estruturas de dados complexas: Embora os arquivos JSON sejam compatíveis com uma ampla variedade de tipos de dados, eles não são adequados para armazenar estruturas de dados complexas, como gráficos ou árvores. Isso pode dificultar o trabalho com determinados tipos de dados usando arquivos JSON.
  2. Não há aplicação de esquema: Os arquivos JSON não impõem nenhum esquema, o que significa que é possível armazenar dados inconsistentes ou inválidos em um arquivo JSON. Isso pode levar a erros e bugs nos aplicativos que dependem dos dados do arquivo.
  3. Recursos limitados de consulta e indexação: Os arquivos JSON não oferecem o mesmo nível de recursos de consulta e indexação que os bancos de dados tradicionais. Isso pode dificultar a realização de pesquisas complexas ou a recuperação de subconjuntos específicos de dados de um arquivo JSON grande.

Principais alternativas ao JSON para intercâmbio eficiente de dados


Há várias alternativas ao JSON que podem ser usadas para intercâmbio ou armazenamento de dados, cada uma com seus próprios pontos fortes e fracos. Algumas das alternativas populares ao JSON são:

  1. XML (Extensible Markup Language). XML é uma linguagem de marcação que usa tags para definir elementos e atributos para descrever os dados. É um formato mais detalhado do que o JSON, mas tem um forte suporte para validação de esquema e estrutura de documentos.
  2. YAML (Yet Another Markup Language). O YAML é um formato de serialização de dados legível por humanos, projetado para ser fácil de ler e escrever. É um formato mais conciso do que o XML e oferece suporte a tipos de dados e comentários complexos.
  3. MessagePack. O MessagePack é um formato de serialização binária projetado para ser mais compacto e eficiente do que o JSON. Ele oferece suporte a tipos de dados complexos e é ideal para a transferência de dados em redes de baixa largura de banda.
  4. Buffers de protocolo. Protocol Buffers é um formato de serialização binária desenvolvido pelo Google. Ele foi projetado para ser altamente eficiente e tem um forte suporte à validação de esquemas, o que o torna ideal para sistemas distribuídos em grande escala.
  5. BSON (Binary JSON). O BSON é um formato de serialização binária que amplia o formato JSON com tipos de dados adicionais e otimizações para aumentar a eficiência. Ele foi projetado para armazenamento e transferência eficientes de dados em bancos de dados MongoDB.

A escolha do formato de intercâmbio de dados depende do caso de uso específico e dos requisitos do aplicativo. O JSON continua sendo uma escolha popular devido à sua simplicidade, versatilidade e ampla adoção, mas outros formatos como XML, YAML, MessagePack, Protocol Buffers e BSON podem ser mais adequados para determinados casos de uso.

Bibliotecas Python para trabalhar com dados JSON

Existem alguns pacotes Python populares que você pode usar para trabalhar com arquivos JSON:

  1. json. Esse é um pacote Python integrado que fornece métodos para codificar e decodificar dados JSON.
  2. simplejson. Esse pacote fornece um codificador e decodificador JSON rápido com suporte para tipos específicos do Python.
  3. ujson. Esse pacote é um codificador e decodificador JSON ultrarrápido para Python.
  4. jsonschema. Esse pacote fornece uma maneira de validar dados JSON em relação a um esquema especificado.

Serialização e desserialização de JSON

A serialização e a desserialização de JSON são os processos de conversão de dados JSON de e para outros formatos, como objetos ou cadeias de caracteres Python, para transmitir ou armazenar os dados.

A serialização é o processo de conversão de um objeto ou estrutura de dados em uma cadeia de caracteres JSON. Esse processo é necessário para transmitir ou armazenar os dados em um formato que possa ser lido por outros sistemas ou programas. A serialização JSON é uma técnica comum usada no desenvolvimento da Web, em que os dados são frequentemente transmitidos entre diferentes sistemas ou aplicativos.

A desserialização, por outro lado, é o processo de conversão de uma string JSON de volta em um objeto ou estrutura de dados. Esse processo é necessário para usar os dados em um programa ou sistema. A desserialização de JSON é frequentemente usada no desenvolvimento da Web para analisar dados recebidos de uma API ou de outra fonte.

A serialização e a desserialização de JSON são técnicas importantes para trabalhar com dados JSON em vários contextos, desde o desenvolvimento da Web até a análise de dados e muito mais. Muitas linguagens de programação oferecem bibliotecas ou pacotes integrados para tornar a serialização e a desserialização fáceis e eficientes.

Aqui estão algumas funções comuns da biblioteca json que são usadas para serialização e desserialização.

1. json.dumps()

Essa função é usada para serializar um objeto Python em uma string JSON. A função dumps() recebe um único argumento, o objeto Python, e retorna uma cadeia de caracteres JSON. Veja um exemplo:

import json

# Python object to JSON string
python_obj = {'name': 'John', 'age': 30}

json_string = json.dumps(python_obj)
print(json_string)  

# output: {"name": "John", "age": 30}

2. json.loads()

Essa função é usada para analisar uma string JSON em um objeto Python. A função loads() recebe um único argumento, a string JSON, e retorna um objeto Python. Veja um exemplo: 

import json

# JSON string to Python object
json_string = '{"name": "John", "age": 30}'


python_obj = json.loads(json_string)


print(python_obj)  

# output: {'name': 'John', 'age': 30}

3. json.dump()

Essa função é usada para serializar um objeto Python e gravá-lo em um arquivo JSON. A função dump() recebe dois argumentos, o objeto Python e o objeto arquivo. Veja um exemplo:

import json

# serialize Python object and write to JSON file
python_obj = {'name': 'John', 'age': 30}
with open('data.json', 'w') as file:
    json.dump(python_obj, file)

4. json.load()

Essa função é usada para ler um arquivo JSON e analisar seu conteúdo em um objeto Python. A função load() recebe um único argumento, o objeto arquivo, e retorna um objeto Python. Veja um exemplo:

import json

# read JSON file and parse contents
with open('data.json', 'r') as file:
    python_obj = json.load(file)
print(python_obj)  

# output: {'name': 'John', 'age': 30}

O Python e o JSON têm tipos de dados diferentes, sendo que o Python oferece uma gama mais ampla de tipos de dados do que o JSON. Enquanto o Python é capaz de armazenar estruturas de dados complexas, como conjuntos e dicionários, o JSON limita-se a lidar com cadeias de caracteres, números, booleanos, matrizes e objetos. Vamos dar uma olhada em algumas das diferenças:

Python

JSON

ditado

Objeto

lista

Matriz

tupla

Matriz

str

Cordas

int

Número

flutuar

Número

Verdadeiro

verdadeiro

Falso

false

Nenhum

null

Lista Python para JSON

Para converter uma lista Python para o formato JSON, você pode usar o método json.dumps() da biblioteca json.

import json

my_list = [1, 2, 3, "four", "five"]

json_string = json.dumps(my_list)

print(json_string)

Neste exemplo, temos uma lista chamada my_list com uma mistura de números inteiros e cadeias de caracteres. Em seguida, usamos o método json.dumps() para converter a lista em uma cadeia de caracteres formatada em JSON, que armazenamos na variável json_string.

Formatação de dados JSON

No Python, a função json.dumps() fornece opções para formatar e ordenar a saída JSON. Aqui estão algumas opções comuns:

1. Recuo

Essa opção especifica o número de espaços a serem usados para recuo na string JSON de saída. Por exemplo:

import json

data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

json_data = json.dumps(data, indent=2)

print(json_data)
```

This will produce a JSON formatted string with an indentation of 2 spaces for each level of nesting:

```
{
  "name": "John",
  "age": 30,
  "city": "New York"
}

2. Sort_keys

Essa opção especifica se as chaves na cadeia de caracteres JSON de saída devem ser classificadas em ordem alfabética. Por exemplo:

import json

data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

json_data = json.dumps(data, sort_keys=True)

print(json_data)

Isso produzirá uma cadeia de caracteres formatada em JSON com as chaves em ordem alfabética:

{"age": 30, "city": "New York", "name": "John"}

3. Separadores

Essa opção permite que você especifique os separadores usados na string JSON de saída. O parâmetro separators usa uma tupla de duas cadeias de caracteres, em que a primeira cadeia é o separador entre pares de valores-chave de objetos JSON e a segunda cadeia é o separador entre itens em matrizes JSON. Por exemplo:

import json

data = {
    "name": "John",
    "age": 30,
    "city": "New York"
}

json_data = json.dumps(data, separators=(",", ":"))

print(json_data)
```
This will produce a JSON formatted string with a comma separator between key-value pairs and a colon separator between keys and values:

```
{"name":"John","age":30,"city":"New York"}

Exemplo em Python - dados JSON em APIs

import requests
import json


url = "https://jsonplaceholder.typicode.com/posts"


response = requests.get(url)


if response.status_code == 200:
    data = json.loads(response.text)
    print(data)
else:
    print(f"Error retrieving data, status code: {response.status_code}")

SAÍDA:

Dados de saída

Esse código usa a biblioteca requests e a biblioteca json no Python para fazer uma solicitação ao URL "https://jsonplaceholder.typicode.com/posts" e recuperar dados. A linha requests.get(url) faz a solicitação real e armazena a resposta na variável response.

A linha if response.status_code == 200: verifica se o código de resposta é 200, o que significa que a solicitação foi bem-sucedida. Se a solicitação for bem-sucedida, o código carregará o texto da resposta em um dicionário Python usando o método json.loads() e o armazenará na variável de dados.


Se você quiser saber mais sobre esse assunto, confira nosso tutorial sobre APIs da Web, solicitações em Python e execução de uma solicitação HTTP em Python.

Otimização do desempenho de JSON em Python

Ao trabalhar com grandes quantidades de dados JSON em Python, é importante otimizar o desempenho do seu código para garantir que ele seja executado com eficiência. Aqui estão algumas dicas para otimizar o desempenho do JSON em Python:

  1. Use as bibliotecas cjson ou ujson. Essas bibliotecas são mais rápidas do que a biblioteca JSON padrão em Python e podem melhorar significativamente o desempenho da serialização e desserialização de JSON.
  2. Evite conversões desnecessárias. A conversão entre objetos Python e dados JSON pode ser dispendiosa em termos de desempenho. Se possível, tente trabalhar diretamente com dados JSON e evite conversões desnecessárias.
  3. Use geradores para dados JSON grandes. Ao trabalhar com grandes quantidades de dados JSON, o uso de geradores pode ajudar a reduzir o uso da memória e melhorar o desempenho.
  4. Minimizar a sobrecarga da rede. Ao transmitir dados JSON em uma rede, minimizar a quantidade de dados transferidos pode melhorar o desempenho. Use técnicas de compactação, como o gzip, para reduzir o tamanho dos dados JSON antes de transmiti-los pela rede.
  5. Use o cache. Se você acessa com frequência os mesmos dados JSON, o armazenamento em cache dos dados pode melhorar o desempenho, reduzindo o número de solicitações para carregar os dados.
  6. Otimizar a estrutura de dados: A estrutura dos dados JSON também pode afetar o desempenho. O uso de uma estrutura de dados mais simples e plana pode melhorar o desempenho em relação a uma estrutura complexa e aninhada.

Limitações do formato JSON

Embora o JSON seja um formato popular para troca de dados em muitos aplicativos, é preciso estar ciente de algumas limitações de implementação:

  1. Falta de suporte para alguns tipos de dados. O JSON tem suporte limitado a determinados tipos de dados, como dados binários, datas e horas. Embora existam soluções alternativas para representar esses tipos em JSON, isso pode tornar a serialização e a desserialização mais complicadas.
  2. Falta de suporte para comentários. Diferentemente de outros formatos, como YAML e XML, o JSON não oferece suporte a comentários. Isso pode dificultar a adição de comentários aos dados JSON para fornecer contexto ou documentação.
  3. Flexibilidade limitada para extensões. Embora o JSON ofereça suporte a extensões por meio de propriedades personalizadas ou da propriedade $schema, o formato não oferece tanta flexibilidade para extensões quanto outros formatos, como XML ou YAML.
  4. Nenhum padrão para preservar a ordem das chaves. O JSON não tem uma maneira padrão de preservar a ordem das chaves em um objeto, o que dificulta a comparação ou a mesclagem de objetos JSON.
  5. Suporte limitado para referências circulares. O JSON tem suporte limitado para referências circulares, em que um objeto faz referência a si mesmo. Isso pode dificultar a representação de algumas estruturas de dados em JSON.

É importante estar ciente dessas limitações de implementação ao trabalhar com dados JSON para garantir que o formato seja adequado às suas necessidades e para evitar possíveis problemas com serialização, desserialização e representação de dados.

Conclusão

O JSON é um formato versátil e amplamente usado para troca de dados no desenvolvimento moderno da Web, e o Python oferece um conjunto avançado de ferramentas para trabalhar com dados JSON. Quer você esteja criando uma API ou trabalhando com aplicativos da Web do lado do cliente, compreender os fundamentos do JSON em Python é uma habilidade essencial para qualquer desenvolvedor moderno. Ao dominar as técnicas descritas neste tutorial, você estará no caminho certo para trabalhar com dados JSON em Python e criar aplicativos robustos e dimensionáveis que aproveitem o poder desse poderoso formato de intercâmbio de dados.

Se você quiser saber como criar pipelines para importar dados mantidos em formatos de armazenamento comuns, confira nosso artigo Ingestão de dados simplificada com pandas curso. Você usará o pandas, uma importante biblioteca Python para análise, para obter dados de várias fontes, incluindo uma planilha de respostas de pesquisas, um banco de dados de solicitações de serviços públicos e uma API de um site de avaliação popular. 

Temas

Saiba mais sobre Python

Course

Introduction to Databases in Python

4 hr
95.2K
In this course, you'll learn the basics of relational databases and how to interact with them.
See DetailsRight Arrow
Start Course
Veja MaisRight Arrow
Relacionado

blog

Como aprender Python do zero em 2024: um guia especializado

Descubra como aprender Python, suas aplicações e a demanda por competências em Python. Comece sua jornada em Python hoje mesmo ​com nosso guia detalhado.
Matt Crabtree's photo

Matt Crabtree

19 min

blog

Mais de 60 projetos Python para todos os níveis de conhecimento

60 ideias de projetos de ciência de dados que os cientistas de dados podem usar para criar um portfólio sólido, independentemente de sua especialização.
Bekhruz Tuychiev's photo

Bekhruz Tuychiev

16 min

tutorial

Como comentar um bloco de código em Python

O uso de comentários é fundamental para trabalhar efetivamente com Python. Neste breve tutorial, aprenda a comentar um bloco de código em Python.
Adel Nehme's photo

Adel Nehme

3 min

tutorial

Como aparar uma cadeia de caracteres em Python: Três métodos diferentes

Aprenda os fundamentos do corte de caracteres à esquerda e à direita de uma string em Python.
Adel Nehme's photo

Adel Nehme

5 min

tutorial

Declaração de caso de troca do Python: Um guia para iniciantes

Explore o match-case do Python: um guia sobre sua sintaxe, aplicativos em ciência de dados, ML e uma análise comparativa com o switch-case tradicional.
Matt Crabtree's photo

Matt Crabtree

5 min

tutorial

Tutorial de Python

Em Python, tudo é objeto. Números, cadeias de caracteres (strings), DataFrames, e até mesmo funções são objetos. Especificamente, qualquer coisa que você usa no Python tem uma classe, um modelo associado por trás.
DataCamp Team's photo

DataCamp Team

3 min

See MoreSee More