JSON Python: o que é, para que serve e como usar?

O formato JSON (JavaScript Object Notation) é amplamente conhecido pelas pessoas desenvolvedoras mais experientes. Embora seja mais conhecida por ser uma sintaxe de declaração de objetos originalmente inspirada e implementada na linguagem JavaScript, é também disponibilizada e utilizada na implementação de sistemas escritos em Python.

Muitos iniciantes nessa linguagem de programação se sentem inseguros ao trabalhar dados no formato JSON no Python. Muitas vezes, porque a linguagem tem algumas especificidades em relação ao tratamento e ao acesso de dados — um pouco diferentes de outras, igualmente comuns no mercado de desenvolvimento. Mas acredite, não é assim tão complicado, como veremos no decorrer de nosso guia.

Ao entender os principais aspectos que abordaremos ao decorrer do conteúdo, tenha certeza de que você será capaz de incorporar mais essa ferramenta durante o desenvolvimento de suas aplicações. Saiba que isso ajudará muito durante a manutenção de seu código e na dinâmica com outros sistemas, como Android ou Web.

Para isso, veremos os principais conteúdos relacionados ao tema:

Não se esqueça de preparar sua IDE para aplicar seus novos conhecimentos. Vamos nessa?

Saiba o que é o JSON em Python e para que serve

O JSON é um formato de arquivo, um modelo de estrutura de dados, muito utilizado no desenvolvimento de aplicações em boa parte das linguagens de programação atuais. Ele funciona no processamento e na manipulação dos mais diversos tipos de dados.

Em Python, especificamente, usar o JSON possibilita uma facilitação quando precisamos acessar e alterar valores e chaves em dicionários, por exemplo. Faz isso de maneira mais simplificada do que as disponibilizadas convencionalmente pela linguagem.

Para utilizar a função que implementa e possibilita o uso do modelo JSON Python, precisamos importar alguns pacotes específicos — JSON ou Pandas são os principais. Confira, a seguir, como realizar esse procedimento e mais alguns detalhes!

Importe JSON em Python

Para importarmos as bibliotecas que possibilitam o uso de JSON nas aplicações pythonicas, é bem simples. Podemos importar tanto o pacote “JSON”, específico para isso, como o pacote Pandas — bibliotecas que trabalham muito bem com a manipulação de diversas estruturas de dados em Python. Veja os exemplos!

Biblioteca JSON — sintaxe

import json
 
with open('nomedoarquivo.json') as j:
    nomedoarquivo = json.load(j)

Biblioteca Pandas — sintaxe

import pandas as pandas
df = pandas.read_json(‘nomedoarquivo.json’)

Tipos de dados em Python e JSON: confira as especificidades

Para explicarmos como o Python opera os diversos tipos de dados possíveis em JSON, precisamos entender um conceito básico da linguagem em relação a essa estrutura, a serialização. Refere-se à transformação de dados em uma série de bytes — daí que vem o “serial” — e o processo em que ocorre a conversão dos dados característicos da linguagem para que sejam armazenados.

É importante relembrar que alguns tipos de dados são bem específicos do Python. Como os arquivos JSON são universais, no que condiz a sua utilização por outras linguagens, é necessário que alguns desses dados utilizados pela linguagem sejam convertidos, para que possam ser aproveitados em seus sistemas.

Um dos exemplos mais característicos seria a tupla, uma estrutura de dados do Python — semelhante a uma lista. Para você ter uma ideia, em Python, as tuplas são convertidas em arrays para que sejam passíveis de armazenamento no formato JSON.

De maneira semelhante, ocorre o processo com um objeto JSON, o qual é importado e analisado como um dicionário do Python. Por sua vez — é conhecido também como “dict”, uma estrutura de dados que armazena pares de dados em cada elemento do índice, com uma chave e valor específicos, bastante semelhante ao “map”, em Java. Mas qual o motivo de adicioná-lo como um “dict”?

A estrutura “dict” em Python, por si só, já é muito semelhante em estrutura a um JSON. Ela pode conter diversos outros tipos de estrutura, como listas, tuplas — e até outros “dicts”. A lista abaixo mostra como os vários tipos de dados em Python são armazenados quando convertidos em JSON, e vice-versa:

  • dicionário: objeto;
  • lista ou tupla: array;
  • string: string (caracteres);
  • integers, longs e floats: numbers (números);
  • booleanos: true ou false (verdadeiro ou falso);
  • vazio, nulo ou null : null.

Use o Parse JSON em Python

“Parse” é uma palavra de origem inglesa. Pode ser definida como o processamento de apenas um pedaço de uma aplicação escrita em Python, e a conversão desses códigos na linguagem de máquina

De maneira geral, é possível dizermos que parse é um comando usado para “dividir o código” do programa que escrevemos em um pequeno pedaço de código. Fazemos isso para que seja possível analisar se determinada sintaxe em um JSON está correta para ser manipulada pelo Python, ou verificar se algum dado está presente no conjunto de elementos que temos disponíveis.

Confira, a seguir, uma exemplo de um parse sendo realizado em Python, buscando um elemento dentro de um JSON, sendo representado por um dicionário, nesse caso:

import json

# nosso JSON:
a = '{ "nome":"Elton", "idade":32, "cidade":"Campinas"}'

# parse elemento “a”:
y = json.loads(a)

# imprimindo o resultado, pedindo a idade do elemento do dicionário:
print(y["idade"])

Ao aplicarmos o método loads(), o Python interpreta o JSON como um dicionário e nos imprime, no console, a idade que pedimos.

Dump e Dumps: serialize listas, dicionários e tuplas no formato JSON

Muitas vezes, precisaremos fazer o contrário do que aplicamos no trecho anterior, em nosso guia — criar uma estrutura do tipo String para nossos dados a partir de outro objeto JSON. Sendo um dicionário, como no exemplo que trazemos, ou não, isso será essencial para podermos manipulá-los conforme as melhores práticas.

Para esses casos, usamos as funções dump() e dumps(), presentes no módulo JSON. A aplicação de cada uma delas é bem simples, sendo o objeto que queremos analisar um argumento dessas funções. Para isso, basta usarmos a seguinte sintaxe:

nome_do_json.dumps(<objeto a ser processado>)

ou

nome_do_json.dump(<objeto a ser processado>, <arquivo a ser processado>)

A diferença entre as duas é que a primeira, dump(), é responsável por escrever um objeto JSON em um arquivo, enquanto dumps() busca a string JSON em um objeto.

Em um código um pouco mais prático, fazemos assim:

import json as j

# um objeto em python (dicionário, neste caso):
a  = {
  "nome": "John",
  "idade": 30,
  "cidade": "New York",
  "cordapele": "branca"
}

# convertendo em um JSON com a função dumps():
y = j.dumps(a)

# o resultado no console é uma string JSON:
print(y)

Lembrando que o mesmo processo poderá ser realizado não apenas com dicionários, mas também, com listas e tuplas.

Load e Loads: desserialize arquivos e strings do formato JSON

Se temos uma string em um JSON que precisamos manipular em Python, a melhor maneira de realizar essa ação é utilizando o método loads() — ou json.loads(), mais especificamente. Com ele, fazemos o contrário do feito pelo dumps(), desserializando o JSON em um objeto Python. Confira esse exemplo:

# Imagine que esteja disponível em nossa máquina o seguinte arquivo JSON, #com o nome dados.JSON:
#
#{
#‘nome’: ‘Fulano de Tal’,
# ‘profissao’: ‘Desenvolvedor de Sistemas Web’
#}

import json

with open(‘dados.json’, ‘r’) as json_file:    
	dados = json.load(json_file)

print(dados)print(type(dados))

Teremos o seguinte retorno no console:

{‘nome’: ‘Fulano de Tal’, ‘profissao’: ‘Desenvolvedor de Sistemas Web’}
<class ‘dict’>

Também temos a função load, que difere do método loads() em seu propósito central, que é a criação de um objeto em Python a partir de um arquivo JSON — enquanto o outro faz uma ação semelhante, mas a partir de uma string, resumidamente. Ambos retornarão um objeto Python em suas saídas.

Converta JSON para Python

O já abordado método dumps(), do pacote JSON, pode ser utilizado para gravar o objeto de dados no arquivo aberto. Já o método load(), do mesmo módulo, também pode ler o arquivo e retornar o objeto — sendo do mesmo tipo de dados em que foram salvos.

Nesse caso, apresentaremos um dicionário — para salvá-lo como um arquivo de tipo JSON, precisamos antecipadamente abrir um arquivo que seja .JSON para que essa funcionalidade seja usada. Além disso, é necessário ter o mesmo arquivo carregado.

No próximo exemplo, você acompanha o uso dos métodos json.dump() e json.load() para esse tipo de manipulação, veja:

import json

meu_dicionario = { 'Zero': 0, 'Um': 1, 'Dois': 2, 'Trinta': 30, 'Quarenta': 40}
with open('data.json', 'w') as dj:
   json.dump(meu_dicionario, dj)

with open('data.json', 'r') as dj:
   data = json.load(dj)
print(data)
print(type(data))

O resultado deverá ser semelhante a esse, na saída do console: 

{'Zero': 0, 'Um': 1, 'Dois': 2, 'Trinta': 30, 'Quarenta': 40}
<class 'dict'>

Classifique JSON com o parâmetro sort_keys

O método sort_keys() é utilizado na linguagem Python para um reordenamento das chaves presentes nos dicionários que acessamos em formato de JSON ou dicionário. Funciona como um ordenamento dessas chaves em ordem crescente, do menor para o maior. Quando as chaves são strings, a ordenação em funcionamento será alfabética. 

Nesse exemplo, adaptamos levemente o último código para que seja facilmente visualizado qual o papel realizado pelo sort_key durante a execução desse programa para o devido ordenamento de nosso JSON:

import json

meu_dicionario = { 'treze': 13, 'vinte': 20, 'Dois': 2, 'Trinta': 30, 'cinco': 5}
with open('data.json', 'w') as dj:
   json.dump(meu_dicionario, dj)

with open('data.json', 'r') as dj:
   data = json.load(dj)
print(data)
print(json.dumps(meu_dicionario, sort_keys=True, indent=4))
print(type(data))

O resultado na saída do terminal será bem semelhante ao seguinte:

{'treze': 13, 'vinte': 20, 'dois': 2, 'trinta': 30, 'cinco': 5}
{
   "cinco": 5,
   "dois": 2,
   "treze": 13,
   "trinta": 30,
   "vinte": 20
}

<class 'dict'>

Salve seu dicionário em um arquivo de texto mais próximo de um arquivo JSON

Nesse programa, criamos um arquivo denominado pessoas.txt, usando o modo de escrita — usando ‘w’ de write, como será observado no código. Caso tal arquivo não exista, ele será criado, então, não se preocupe com essa tarefa.

Repare que usamos o método json.dump(), o qual transforma dicionario_nomedepessoas em uma string JSON a ser salva no arquivo pessoas.txt. Assim que o programa que escrevemos foi executado, o arquivo pessoas.txt será criado na pasta específica do seu código:

import json

dicionario_nomedepessoas = {"nome": "Mariana",
"linguas_faladas": ["Português", "Inglês", “Hindi”],
"casamento_sim": True,
"idade_num": 36
}
with open(pessoas.txt', 'w') as json_file:
  json.dump(dicionario_nomedepessoas, json_file)

É esperado que o arquivo pessoas.txt, agora, tenha o seguinte texto dentro dele:

{"nome": "Mariana", "linguas_faladas": ["Português", "Inglês", “Hindi”], "casamento_sim": True, "idade_num": 36]

Transforme seu XML para JSON em Python

Nesse exemplo, mostraremos como você pode converter um XML para JSON na linguagem Python — confira mais de perto os principais Métodos Python disponíveis para isso:

import xmltodict as xmltodict
import json as json

obj = xmltodict.parse("""
<colaboradores>
   <colaborador>
        <nome>Davi</nome>
        <cargo>Desenvolvedor</cargo>
        <idade>34</idade>
    </colaborador>
</colaboradores>
""")
print(json.dumps(obj))

Você reparou o novo pacote que trazemos, nesse exemplo? Pois, é! A biblioteca xmltodict implementa dados na estrutura XML para serem lidos como dicionários — e posteriormente, em JSON pelo Python.

Perceba que utilizamos, nesse código, o xmltodict.parse como o método para realizar a transformação e possibilitar a leitura de dados como dicionário pelo sistema. A saída no console deverá ser a seguinte:

{“colaboradores” {“colaborador”: {“nome”: “Davi”, “cargo”:”Desenvolvedor”, “idade”:34}}}

Agora que você tem um dicionário estruturado em Python, ficou mais fácil passá-lo agora para um JSON, não é mesmo?

Após essa longa jornada, pudemos concluir que vimos os principais aspectos envolvidos durante a manipulação de dados estruturados como JSON em Python. Vimos, no decorrer de nosso guia, que mesmo o tipo de arquivo JSON não ser próprio da linguagem Python, pode ser facilmente manipulado utilizando as formas corretas e com uso de bibliotecas adequadas para o contexto.

Ao longo de nossas explorações, acompanhamos exemplos práticos de manipulação de dicionários e listas — e sua proximidade em relação aos modelos JSON. Aprendemos a converter os principais tipos de dados para poderem ser utilizados como um JSON Python, utilizando exemplos práticos, para facilitar o entendimento de uma pessoa programadora ainda um pouco perdida com alguns detalhes presentes na linguagem.

Qual deles será utilizado em sua aplicação dependerá daquilo que você precisa. A importância da estrutura JSON está em sua interoperabilidade com sistemas em outras linguagens, por isso, é essencial a realização de análises adicionais. Escolher entre as bibliotecas modulares xmltodict, Pandas ou JSON variará de acordo com essas necessidades.

Se você ainda quer saber mais sobre Python e outros assuntos sobre programação, mas ainda não sabe por onde começar, que tal entrar em contato com a Trybe? Fale agora mesmo com a gente e garanta sua entrada para o mercado de desenvolvimento — ou faça sua inscrição em nosso processo seletivo e se prepare!