Manipulação de Dados JSON em Python

PythonBeginner
Pratique Agora

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.