Introdução
JSON (JavaScript Object Notation) é um formato de dados popular para armazenar dados em uma forma serializada e legível por humanos. É comumente usado para transmitir dados entre um servidor e uma aplicação web e também é uma ótima escolha para armazenar dados em um banco de dados NoSQL. Em Python, podemos usar o módulo json para trabalhar com dados JSON.
Conquistas
- Ler e escrever arquivos JSON
- Serializar e desserializar dados JSON
Introdução ao JSON
JSON (JavaScript Object Notation) é um formato leve de intercâmbio de dados que é fácil para humanos lerem e escreverem e fácil para máquinas analisarem e gerarem. Ele é baseado em um subconjunto da Linguagem de Programação JavaScript, Standard ECMA-262 3rd Edition - Dezembro de 1999. JSON é um formato de texto que é completamente independente de linguagem, mas usa convenções que são familiares aos programadores da família de linguagens C, incluindo C, C++, C#, Java, JavaScript, Perl, Python e muitas outras. Essas propriedades tornam o JSON uma linguagem ideal para intercâmbio de dados.
A estrutura básica do JSON consiste em objetos, que são coleções de pares chave-valor, e arrays, que são listas ordenadas de valores.
Aqui está um exemplo de um objeto JSON:
{
"name": "Alice",
"age": 26,
"city": "New York"
}
Este objeto JSON tem três pares chave-valor:
- "name" : "Alice"
- "age" : 26
- "city" : "New York"
Aqui está um exemplo de um array JSON:
["apple", "banana", "cherry"]
Este array JSON tem três valores: "apple", "banana" e "cherry".
Um objeto JSON pode conter múltiplos pares chave-valor e arrays, e um array JSON pode conter múltiplos objetos e arrays. Aqui está um exemplo de uma estrutura JSON mais complexa:
{
"employees": [
{ "firstName": "John", "lastName": "Doe" },
{ "firstName": "Anna", "lastName": "Smith" },
{ "firstName": "Peter", "lastName": "Jones" }
],
"owners": [
{ "name": "Alice", "age": 30 },
{ "name": "Bob", "age": 35 }
],
"office": {
"name": "Acme Inc.",
"location": "New York"
}
}
Este objeto JSON tem três pares chave-valor:
- "employees" : um array de objetos de funcionários
- "owners" : um array de objetos de proprietários
- "office" : um objeto de escritório
Módulo JSON
Para analisar um objeto JSON em Python, podemos usar o módulo json. O módulo json faz parte da biblioteca padrão do Python, então não precisamos instalá-lo separadamente.
Abra uma nova sessão do interpretador Python e digite o seguinte código:
python3
Aqui está um exemplo de como analisar o objeto JSON do exemplo anterior:
import json
json_strings = '{"employees": [{ "firstName": "John", "lastName": "Doe"}, ], "owners": [{ "name": "Alice", "age": 30 }, { "name": "Bob", "age": 35 }], "office": {"name": "Acme Inc."}}'
## Parse the JSON object
data = json.loads(json_strings)
## Access the data
employees = data['employees']
owners = data['owners']
office = data['office']
## Print the data
print(employees)
print(owners)
print(office)
Isso produzirá a seguinte saída:
[{'firstName': 'John', 'lastName': 'Doe'}]
[{'name': 'Alice', 'age': 30}, { "name": "Bob", "age": 35 }]
{'name': 'Acme Inc.'}
Você pode então acessar os dados no objeto JSON usando chaves e índices, assim como faria com um dicionário ou lista Python. Por exemplo, para acessar o primeiro nome do primeiro funcionário, você pode usar o seguinte código:
first_employee = employees[0]
first_name = first_employee['firstName']
print(first_name)
Isso produzirá a seguinte saída:
John
Você também pode iterar pelos arrays e acessar os dados para cada elemento. Por exemplo, para imprimir o nome e a idade de cada proprietário, você pode usar o seguinte código:
for owner in owners:
name = owner['name']
age = owner['age']
print(f'{name} is {age} years old.')
Isso produzirá a seguinte saída:
Alice is 30 years old.
Bob is 35 years old.
Lendo Arquivos JSON
Vamos começar lendo um arquivo JSON. Suponha que temos um arquivo employees.json com o seguinte conteúdo:
{
"employees": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"firstName": "Anna",
"lastName": "Smith"
},
{
"firstName": "Peter",
"lastName": "Jones"
}
]
}
employees.json existe em /home/labex/project.
Para ler este arquivo em Python, podemos usar o seguinte código:
import json
## Open the file
with open('/home/labex/project/employees.json', 'r') as file:
## Load the contents of the file into a variable
data = json.load(file)
## Print the contents of the file
print(data)
Isso produzirá a seguinte saída:
{'employees': [{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]}
Podemos acessar os dados no arquivo usando as chaves do objeto JSON, assim como faríamos com um dicionário Python. Por exemplo, para acessar a lista de funcionários, podemos usar a chave employees:
employees = data['employees']
print(employees)
Isso produzirá a seguinte saída:
[{'firstName': 'John', 'lastName': 'Doe'}, {'firstName': 'Anna', 'lastName': 'Smith'}, {'firstName': 'Peter', 'lastName': 'Jones'}]
Também podemos iterar pela lista de funcionários e imprimir seus nomes:
for employee in employees:
print(employee['firstName'], employee['lastName'])
Isso produzirá a seguinte saída:
John Doe
Anna Smith
Peter Jones
Escrevendo Arquivos JSON
Agora que sabemos como ler um arquivo JSON, vamos aprender como escrever em um. Podemos usar a função json.dump() para escrever dados em um arquivo JSON.
Suponha que temos uma lista de dicionários contendo informações sobre alunos. Podemos escrever esses dados em um arquivo chamado students.json assim:
import json
## A list of dictionaries
students = [
{ "name": "Alice", "age": 26, "major": "Computer Science" },
{ "name": "Bob", "age": 27, "major": "Economics" },
{ "name": "Charlie", "age": 25, "major": "Physics" }
]
## Open the file
with open('students.json', 'w') as file:
## Write the data to the file
json.dump(students, file)
Agora vamos verificar se os dados foram escritos corretamente:
with open('students.json', 'r') as file:
data = json.load(file)
print(data)
Isso produzirá a seguinte saída:
[
{ "name": "Alice", "age": 26, "major": "Computer Science" },
{ "name": "Bob", "age": 27, "major": "Economics" },
{ "name": "Charlie", "age": 25, "major": "Physics" }
]
Também podemos usar a função json.dumps() para converter um objeto Python em uma string JSON, que podemos então salvar em um arquivo ou enviar pela rede. Aqui está um exemplo:
## Convert the list of dictionaries to a JSON string
json_string = json.dumps(students)
print(json_string)
## Save the string to a file
with open('students.json', 'w') as file:
file.write(json_string)
## Now let's verify that the data was written correctly
with open('students.json', 'r') as file:
data = json.load(file)
print(data)
Isso terá a mesma saída que o exemplo anterior.
Objeto Python e String JSON
Um objeto Python é uma coleção de dados na forma de listas, dicionários, etc., que é armazenada na memória. Uma string JSON, por outro lado, é uma representação serializada de um objeto JSON. É uma string de caracteres que representa os dados no objeto JSON, mas não é armazenada na memória como um objeto real.
Aqui está um exemplo de como usar a função read() para ler o conteúdo de students.json:
with open('students.json', 'r') as file:
json_string = file.read()
print(json_string)
Isso produzirá a seguinte saída:
[{"name": "Alice", "age": 26, "major": "Computer Science"}, {"name": "Bob", "age": 27, "major": "Economics"}, {"name": "Charlie", "age": 25, "major": "Physics"}]
Quando você tenta obter o primeiro elemento da json_string, você obterá o primeiro caractere da string:
print(json_string[0])
[
Isso ocorre porque json_string é uma string, não uma lista (Objeto Python). Para convertê-la em uma lista, podemos usar a função json.loads():
import json
## Convert the JSON string to a Python object
python_object = json.loads(json_string)
print(python_object)
A saída é semelhante à acima, com a diferença entre aspas simples e duplas.
[{'name': 'Alice', 'age': 26, 'major': 'Computer Science'}, {'name': 'Bob', 'age': 27, 'major': 'Economics'}, {'name': 'Charlie', 'age': 25, 'major': 'Physics'}]
Agora podemos acessar o primeiro elemento da lista:
print(python_object[0])
{ "name": "Alice", "age": 26, "major": "Computer Science" }
Iniciantes frequentemente confundem Objeto Python e String JSON, então preste atenção especial.
Resumo
Parabéns! Você concluiu o laboratório sobre arquivos JSON. Você aprendeu como ler e escrever arquivos JSON em Python. Você também aprendeu como trabalhar com dados JSON em Python.



