Cómo analizar JSON en Python - Pasos sencillos

Comentarios: 0

JSON son las siglas de JavaScript Object Notation. No sólo es ligero, sino también fácil de leer y escribir para los humanos. Del mismo modo, las máquinas lo encuentran sencillo de analizar y generar. Para cualquier desarrollador de Python, el análisis sintáctico es crucial cuando se trabaja con contenido de APIs, archivos de configuración u otras fuentes de información almacenada. Este artículo te guía a través de los fundamentos del parseo de JSON usando el módulo de Python, incluyendo cómo usar json.dump python para guardar contenido.

Comprender JSON y su estructura

JSON estructura los datos en pares clave-valor. He aquí un ejemplo básico de un objeto:


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

Este ejemplo de análisis sintáctico de json en python contiene elementos comunes: una cadena, un número, un booleano y un array. Familiarizarse con esta estructura hace que sea mucho más fácil trabajar en Python.

Interacción con JSON en Python

Mediante la implementación de python parse cadena json fácilmente utilizando el módulo incorporado en Python. Este módulo incluye métodos como json.loads() para leer de una cadena, y json.load() para leer de un archivo. A la inversa, json.dumps() y json.dump Python se utilizan para escribir información en una cadena y en un archivo, respectivamente.

Lectura de datos JSON

Veamos cómo leer datos JSON, de lo que hablaremos a continuación.

Lectura de JSON a partir de una cadena

Si quieres leer json en python, entonces usa json.loads() para analizar una cadena y convertirla en un objeto Python:


import json

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

print(data)

Salida:

1.png

Extracción de JSON de un archivo

Para extraer información de un archivo, utilice este método: json.load() y abra un archivo json en python:


import json

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

print(data)

Salida:

2.png

Escritura de datos JSON

Antes de escribir, a menudo es necesario leer o cargar la información existente - y ahí es donde el método python load json file resulta útil. Una vez que la información se ha cargado correctamente, puedes manipularla y escribirla de nuevo en varios formatos.

Escribir JSON en una cadena

Para escribir información en una cadena, utilice el método json.dumps de Python:


import json

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

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

Salida:

3.png

Escribir JSON en un archivo

Para escribir los detalles de este archivo, utilice el método json.dump de Python:


import json

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

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

Gestión avanzada de JSON anidado

Los objetos anidados son comunes cuando se trabaja con estructuras de información más complejas, que pueden manejar fácilmente estas estructuras anidadas.


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'])

Salida:

4.png

Codificador JSON personalizado

El lenguaje no puede convertir automáticamente todos los objetos personalizados en JSON. En esos casos, tendrás que crear un 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)

Salida:

5.png

Descodificador JSON personalizado

Para deserializar en objetos personalizados, necesitarás implementar un decodificador personalizado que sepa cómo manejarlos.


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)

Salida:

6.png

Tratamiento de problemas comunes

Trabajar con detalles de datos puede dar lugar a varios errores comunes, sobre todo al analizar, generar o acceder a contenido estructurado. El uso de un parser python json fiable puede ayudar a identificar y solucionar estos problemas de manera más eficiente. He aquí algunos de los más comunes:

Formato JSON no válido

Un error común al analizar archivos json es encontrar un formato no válido. Requiere comillas dobles alrededor de las claves y los valores de cadena, y el anidamiento adecuado de corchetes y llaves.


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}")

Salida:

7.png

Gestión de llaves perdidas

A veces, el contenido no incluye todas las claves esperadas. El uso del método get() le permite manejar con seguridad las claves que faltan devolviendo un valor por defecto en lugar de generar un error.


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)

Depuración de problemas de análisis JSON

Utilice el módulo pdb para establecer puntos de interrupción y depurar su código de análisis.


import json
import pdb

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

Ejemplo práctico de manejo de JSON en web scraping

El web scraping suele consistir en recuperar contenidos de servicios que devuelven la información obtenida. A continuación se muestra un ejemplo que utiliza la biblioteca de peticiones junto con el endpoint https://httpbin.org/anything.

Antes de empezar, comprueba que has instalado el paquete de peticiones:


pip install requests

Cuando se trabaja con contenido estructurado, se puede utilizar la biblioteca requests para facilitar las cosas. Basta con emitir una solicitud GET y la URL a través de requests.get(url). A continuación, puede analizar la respuesta con response.json(). A partir de ahí, es sencillo acceder a información específica como las cabeceras, el agente de usuario, el origen o la URL de la solicitud e imprimirla según sea necesario.

El código contiene un fuerte manejo de errores; captura json.JSONDecodeError cuando ocurre un error de decodificación, y KeyError cuando una clave específica está ausente, consecuentemente haciendo que el programa esté a salvo de caídas 'sin datos'. Esta robustez del código le permite manejar perfectamente tareas reales de web scraping.


import requests
import json

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

response = requests.get(url)

try:
    data = response.json()

    # Extracción de datos específicos de la respuesta 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 desarrollador debe saber cómo parsear un archivo json en python. Con el módulo y la mejor forma de hacerlo que destaca este manual, serás capaz de leer, escribir y depurar lo suficientemente rápido. Esto significa probar tu código con regularidad y utilizar las herramientas adecuadas y las últimas características para un mejor rendimiento. Esta guía se centra en el análisis sintáctico de datos json en python para ayudarte a dominar estas tareas de manera eficiente.

Al hacer web scraping, el análisis sintáctico se convierte en algo esencial, ya que el contenido de las API web suele venir en este formato. Ser hábil en su procesamiento y manipulación permite extraer información valiosa de diversas fuentes de forma eficiente.

Conclusión

El análisis sintáctico es una habilidad clave para cualquier desarrollador que trabaje con API web, archivos de configuración o fuentes externas. El manejo de la información -ya sea leyendo desde una cadena, un archivo, escribiendo una salida estructurada o tratando con objetos anidados y personalizados- se simplifica a través del módulo incorporado en Python. Los desarrolladores pueden desbloquear los métodos json.load(), json.loads(), json.dump(), json.dumps() de Python y aprender a lidiar con problemas comunes, implementar codificadores o decodificadores personalizados, y hacer aplicaciones a medida para interacciones de información que sean robustas y fiables. Dado que este formato es un estándar web para el intercambio de información, estas habilidades son valiosas para el scraping, la manipulación de contenidos y la integración de múltiples servicios a través de APIs. El uso de un sencillo código python para leer archivos json hace que el análisis sintáctico de un archivo json en python sea accesible para cualquier proyecto, mientras que json.dump python permite volver a guardar el material de forma eficiente.

Comentarios:

0 Comentarios