Como analisar JSON em Python - Passos fáceis

Comentários: 0

JSON significa JavaScript Object Notation (Notação de Objectos JavaScript). Não só é leve como também é fácil de ler e escrever para os humanos. Da mesma forma, as máquinas acham-no simples de analisar e gerar. A análise é crucial ao lidar com conteúdo de APIs, arquivos de configuração ou outras fontes de informações armazenadas para qualquer desenvolvedor Python. Este artigo apresenta as noções básicas de análise de JSON usando o módulo Python, incluindo como usar json.dump python para salvar conteúdo.

Compreender o JSON e a sua estrutura

O JSON estrutura os pormenores em pares chave-valor. Eis um exemplo básico de um objeto:


{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"]
}

Este exemplo de análise de json em Python contém elementos comuns: uma cadeia de caracteres, um número, um booleano e uma matriz. Familiarizar-se com esta estrutura torna muito mais fácil trabalhar em Python.

Interagir com JSON em Python

Ao implementar python parse json string facilmente usando o módulo embutido em Python. Este módulo inclui métodos como json.loads() para ler a partir de uma cadeia de caracteres e json.load() para ler a partir de um ficheiro. Por outro lado, json.dumps() e json.dump Python são utilizados para escrever informação numa cadeia e num ficheiro, respetivamente.

Ler dados JSON

Vejamos como ler dados JSON, que discutiremos de seguida.

Ler JSON a partir de uma cadeia de caracteres

Se quiser ler json em python, então use json.loads() para analisar uma string e convertê-la num objeto Python:


import json

json_string = '{"name": "Alice", "age": 30, "is_student": false, "courses": ["Math", "Science"]}'
data = json.loads(json_string)

print(data)

Saída:

1.png

Extrair JSON de um ficheiro

Para extrair informações de um ficheiro, utilize este método: json.load() e abra um ficheiro json em python:


import json

with open('data.json', 'r') as file:
    data = json.load(file)

print(data)

Saída:

2.png

Escrever dados JSON

Antes de escrever, é frequentemente necessário ler ou carregar informação existente - e é aí que o método python load json file se torna útil. Assim que a informação é carregada corretamente, podes manipulá-la e escrevê-la de volta em vários formatos.

Escrever JSON numa cadeia de caracteres

Para escrever informações numa cadeia de caracteres, utilize o método Python json.dumps:


import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

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

Saída:

3.png

Escrever JSON num ficheiro

Para escrever os detalhes deste ficheiro, utilize o método Python json.dump:


import json

data = {
    "name": "Alice",
    "age": 30,
    "is_student": False,
    "courses": ["Math", "Science"]
}

with open('data.json', 'w') as file:
    json.dump(data, file)

Gerir JSON aninhado avançado

Os objectos aninhados são comuns quando se trabalha com estruturas de informação mais complexas, que podem facilmente tratar estas estruturas aninhadas.


import json

nested_json_string = '''
{
    "name": "Alice",
    "age": 30,
    "is_student": false,
    "courses": ["Math", "Science"],
    "address": {
        "street": "123 Main St",
        "city": "Wonderland"
    }
}
'''

data = json.loads(nested_json_string)
print(data['address']['city'])

Saída:

4.png

Codificador JSON personalizado

A linguagem não pode transformar automaticamente todos os objectos personalizados em JSON. Nesses casos, terá de criar um codificador personalizado.


import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

class StudentEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Student):
            return obj.__dict__
        return super().default(obj)

student = Student("Alice", 30, False)
json_string = json.dumps(student, cls=StudentEncoder)
print(json_string)

Saída:

5.png

Descodificador JSON personalizado

Para desserializar em objectos personalizados, terá de implementar um descodificador personalizado que saiba como os tratar.


import json

class Student:
    def __init__(self, name, age, is_student):
        self.name = name
        self.age = age
        self.is_student = is_student

def student_decoder(dct):
    return Student(dct['name'], dct['age'], dct['is_student'])

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
student = json.loads(json_string, object_hook=student_decoder)
print(student.name)

Saída:

6.png

Resolver problemas comuns

Trabalhar com detalhes de dados pode levar a vários erros comuns, particularmente ao analisar, gerar ou aceder a conteúdo estruturado. Usar um analisador python json confiável pode ajudar a identificar e corrigir esses problemas com mais eficiência. Aqui estão alguns dos mais comuns:

Formato JSON inválido

Um erro comum ao analisar um ficheiro json é encontrar um formato inválido. Requer aspas duplas à volta das chaves e dos valores das cadeias de caracteres, bem como o encaixe correto de parênteses e chavetas.


import json

invalid_json_string = "{'name': 'Alice', 'age': 30, 'is_student': False}"
try:
    data = json.loads(invalid_json_string)
except json.JSONDecodeError as e:
    print(f"Invalid JSON format: {e}")

Saída:

7.png

Tratamento de chaves em falta

Por vezes, o conteúdo não inclui todas as chaves esperadas. A utilização do método get() permite-lhe lidar de forma segura com as chaves em falta, devolvendo um valor predefinido em vez de provocar um erro.


import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)import json

json_string = '{"name": "Alice", "age": 30}'
data = json.loads(json_string)

is_student = data.get('is_student', False)
print(is_student)

Depuração de problemas de análise JSON

Use o módulo pdb para definir pontos de interrupção e depurar seu código de análise.


import json
import pdb

json_string = '{"name": "Alice", "age": 30, "is_student": false}'
pdb.set_trace()
data = json.loads(json_string)
print(data)

Exemplo prático de manipulação de JSON na recolha de dados da Web

A raspagem da Web geralmente envolve a recuperação de conteúdo de serviços que retornam as informações obtidas. Abaixo está um exemplo que utiliza a biblioteca de pedidos juntamente com o ponto de extremidade https://httpbin.org/anything.

Antes de começarmos, verifique se instalou o pacote requests:


pip install requests

Ao trabalhar com conteúdo estruturado, pode utilizar a biblioteca requests para facilitar as coisas. Basta emitir um pedido GET e o URL através de requests.get(url). Em seguida, é possível analisar a resposta com response.json(). A partir daí, é simples acessar partes específicas de informações como cabeçalhos, o agente do usuário, a origem ou a URL da solicitação e imprimi-las conforme necessário.

O código contém um forte tratamento de erros; capta json.JSONDecodeError quando ocorre um erro de descodificação e KeyError quando uma chave específica está ausente, o que faz com que o programa esteja protegido contra falhas "sem dados". Esta robustez do código permite-lhe, portanto, lidar perfeitamente com tarefas reais de recolha de dados da Web.


import requests
import json

url = 'https://httpbin.org/anything'

response = requests.get(url)

try:
    data = response.json()

    # Extração de dados específicos da resposta JSON
    headers = data['headers']
    user_agent = headers.get('User-Agent', 'N/A')
    origin = data.get('origin', 'N/A')
    url = data.get('url', 'N/A')

    print(f"User Agent: {user_agent}")
    print(f"Origin: {origin}")
    print(f"URL: {url}")

except json.JSONDecodeError:
    print("Error decoding JSON response")

except KeyError as e:
    print(f"Key error: {e} not found in the JSON response")

8.png

Todo desenvolvedor deve saber como analisar um arquivo json em python. Com o módulo e a melhor forma de o fazer destacados por este manual, será capaz de ler, escrever e depurar com rapidez suficiente. Isso significa testar seu código regularmente e usar as ferramentas certas e os recursos mais recentes para obter um melhor desempenho. Este guia centra-se na análise de dados json em python para o ajudar a dominar estas tarefas de forma eficiente.

Ao efetuar a recolha de dados da Web, a análise torna-se essencial, uma vez que o conteúdo das API da Web é frequentemente apresentado neste formato. Ter competências para o processar e manipular permite-lhe extrair informações valiosas de uma variedade de fontes de forma eficiente.

Conclusão

A análise é uma competência fundamental para qualquer programador que trabalhe com APIs Web, ficheiros de configuração ou fontes externas. O manuseamento de informações - quer se trate de ler a partir de uma cadeia de caracteres, de um ficheiro, de escrever um resultado estruturado ou de lidar com objectos aninhados e personalizados - é simplificado através do módulo integrado em Python. Os programadores podem desbloquear os métodos Python json.load(), json.loads(), json.dump(), json.dumps() e aprender a lidar com problemas comuns, implementar codificadores ou descodificadores personalizados e criar aplicações à medida para interações de informação que sejam robustas e fiáveis. Dado que este formato é um padrão da Web para troca de informações, estas competências são valiosas para a recolha, manipulação de conteúdos e integração de vários serviços através de APIs. A utilização de código python simples para ler um ficheiro json torna a análise de um ficheiro json em python acessível a qualquer projeto, enquanto o json.dump python permite guardar material de forma eficiente.

Comentários:

0 Comentários