Lectura y análisis de datos JSON con Python: un tutorial sencillo
La notación de objetos JavaScript es un formato estándar utilizado principalmente por API y sitios web para almacenar objetos de datos mediante texto. En palabras simples, JSON admite estructuras de datos que pueden representar objetos como texto. También utilizado en bases de datos contemporáneas como PostgreSQL, JSON se deriva de JavaScript, como ya habrás adivinado.
Aunque XML y YAML tienen el mismo propósito que JSON, JSON es más simple pero no tan poderoso. De todos modos, muchos desarrolladores sostienen la opinión de que JSON hizo que XML y YAML quedaran obsoletos.
Si bien esto es discutible, lo interesante es que la mayoría de los lenguajes de programación, incluido Python, admiten JSON. Esto se debe principalmente a que es muy fácil de usar.
Si está listo para equiparse con habilidades JSON para complementar su programación en Python, aquí tiene una breve guía que demuestra cómo puede leer y analizar datos JSON con Python.
Ejemplo JSON sencillo
JSON se utiliza sobre todo para transferir objetos de datos a través de API. Echemos un vistazo a una cadena JSON simple:
{
“name”: “France”, “population”: 65640482, “capital”: “Paris”, “languages”: [ “French” ] } |
¿Parecer familiar? El ejemplo anterior parece un diccionario de Python, ¿verdad?
Esto se debe a que JSON contiene datos tal como lo hace un diccionario de Python: en pares clave-valor. Dicho esto, JSON es mucho más flexible. JSON puede contener números, cadenas, valores booleanos e incluso listas.
Es posible que también hayas notado lo liviano que es JSON. A diferencia de un lenguaje similar como XML, JSON no implica ningún marcado. Simplemente contiene los datos que deben transferirse. Esta característica de JSON es lo que lo hace tan popular.
JSON en Python
Lenguajes como C, C++, C#, Ruby, Java y Python, entre muchos otros, soportan JSON de forma nativa. Entonces, en Python, no necesitarás instalar dependencias ni nada más para usarlo.
Python ofrece la posibilidad de escribir codificadores y decodificadores de clientes a través del módulo json en su biblioteca estándar. El módulo maneja la conversión de datos del formato JSON a sus objetos equivalentes en Python, que incluyen listas y diccionarios. Además, el módulo puede convertir objetos Python al formato JSON.
Qué debe hacer antes de analizar datos JSON
Los datos JSON normalmente se almacenan en cadenas y es probable que almacene datos JSON en variables de cadena cuando trabaje con API. Almacenarlos de esta manera es la forma en que se pueden analizar.
Aunque JSON puede hacer otras cosas, se usa con mayor frecuencia para analizar cadenas en diccionarios de Python. El módulo json maneja esta tarea fácilmente. Al igual que con cualquier otro módulo de la biblioteca estándar de Python, debe comenzar importando json. Consta de dos métodos muy útiles: carga y cargas.
Aunque el último método se parece a la forma plural del primero, este no es el caso. La "s" al final de "cargas" significa "cadena". Este método permite el análisis de datos JSON de cadenas.
Por el contrario, el método de carga se utiliza para analizar datos que están en formato de bytes. Veamos primero cómo funciona loads().
Aunque puede utilizar la convención de comillas triples de Python para almacenar cadenas de varias líneas, es posible eliminar los saltos de línea para mejorar la legibilidad. Así es como crearías una cadena JSON en Python:
country = ‘{“name”: “France”, “population”: 65640482}’
print(type(country)) |
La segunda declaración imprimirá la variable que creamos así:
<class ‘str’>
Esta salida confirma que la salida es una cadena JSON. Ahora podemos usar loads() para proporcionar la cadena como argumento:
import json
country = ‘{“name”: “France”, “population”: 65640482}’ country_dict = json.loads(country) print(type(country)) print(type(country_dict)) |
El resultado de la declaración final en el código anterior es "
Antes de comenzar con json.loads() en su código, tenga en cuenta que el método no siempre devuelve diccionarios. El tipo de datos que devuelve está determinado por una cadena de entrada.
Veamos un ejemplo donde la cadena JSON devuelve una lista:
countries = ‘[“France”, “Ghana”]’
countries_list= json.loads(countries) print(type(countries_list)) # This outputs <class ‘list’> |
También es posible que la cadena JSON se transforme en un valor booleano si tiene los datos correctos. Entonces, "verdadero" en JSON se convierte al booleano "Verdadero". Veamos esto en acción:
import json
bool_string = ‘true’ bool_type = json.loads(bool_string) print(bool_type) # This outputs True |
Aquí hay una tabla que indica los objetos JSON y sus correspondientes tipos de datos de Python, por lo que no tiene que depender de escribir sus propios ejemplos para resolverlo:
- JSON
Python
- array
lista
- false
FALSO
- null
Ninguno
- number (integer)
En t
- number (real)
flotar
- object
dictar
- string
cadena
- true
Verdadero
Análisis de archivos JSON en Python
Hasta ahora, nos hemos ocupado del análisis de datos JSON en Python. Analizar archivos JSON en datos de Python implica un proceso similar y es igualmente simple. Dicho esto, analizar archivos JSON requiere utilizar el método open() además de JSON para hacer esto. Además, ahora debe recurrir al uso de load() para leer datos JSON almacenados en archivos.
El método acepta un objeto de archivo JSON y devuelve un objeto Python. Y para obtener el objeto de archivo desde su ubicación, se utiliza el método open(). Veamos cómo funciona esto: comience almacenando el siguiente script JSON en un archivo llamado “france.json”:
{
“name”: “France”, “population”: 65640482, “capital”: “Paris”, “languages”: [ “French” ] } |
Ahora, cree otro archivo de texto y coloque este script de Python en él:
import json
with open(‘france.json’) as f: data = json.load(f) print(type(data)) |
El método open() anterior devuelve un identificador de archivo que luego se entrega al método de carga. La variable "datos" contiene los datos JSON como un diccionario. Esto es lo que puede ejecutar para verificar las claves del diccionario:
print(data.keys())
# The output of this code is dict_keys([‘name’, ‘population’, ‘capital’, ‘languages’]) |
Ahora que tiene esta información, puede imprimir valores específicos como este:
data[‘population’]
# This outputs 65640482 |
Codificación JSON
La codificación JSON, también llamada serialización, se refiere al proceso de convertir objetos Python en objetos JSON. Se realiza utilizando el método dumps(). Aquí hay un ejemplo para explorar cómo funciona: guarde el siguiente script de Python como un archivo nuevo:
import json
languages = [“French”] country = { “name”: “France”, “population”: 65640482, “languages”: languages, “president”: Emmanuel Macron, } country_string = json.dumps(country) print(country_string) |
Ejecute el código y verá el siguiente resultado:
{“name”: “France”, “population”: 65640482, “languages”: [“French”],
“president”: Emmanuel Macron} |
Como puede ver, hemos convertido el objeto Python en un objeto JSON. ¡Analizar un objeto Python en datos JSON es sorprendentemente fácil!
Tenga en cuenta que hemos utilizado un objeto de diccionario en este ejemplo, por eso se convirtió en un objeto JSON. Como habrás adivinado, también puedes convertir listas a JSON. Así es cómo:
import json
languages = [“French”] languages_string = json.dumps(languages) print(languages_string) # This outputs [“French”] |
Por supuesto, la conversión de Python a JSON no se limita a diccionarios y listas. También puede convertir cadenas, números enteros, valores booleanos y números de punto flotante a JSON.
Aquí hay una tabla a la que consultar al convertir objetos Python a JSON:
- Python
JSON
- dict
objeto
- False
FALSO
- int, float, int
número
- list, tuple
formación
- None
nulo
- str
cadena
- True
verdadero
Escribir objetos Python en archivos JSON
Deberá confiar en el método dump() para escribir objetos Python en archivos JSON. Funciona de manera similar a dumps(), con la diferencia de que dump() puede escribir en archivos mientras dumps() devuelve cadenas.
En el siguiente ejemplo, abrimos el archivo en modo de escritura y le escribimos datos JSON:
import json
# Tuple is encoded to JSON array. languages = (“French”) # Dictionary is encoded to JSON object country = { “name”: “France”, “population”: 65640482, “languages”: languages, “president”: Emmanuel Macron, } with open(‘countries_exported.json’, ‘w’) as f: json.dump(country, f) |
Guarde el script en un archivo nuevo y ejecútelo. Se creará o sobrescribirá el archivo .json mencionado en la penúltima línea. El contenido de este nuevo archivo será JSON.
Pero cuando abras este nuevo archivo, verás que el JSON estará en una línea. Si está interesado en mejorar la legibilidad, puede pasar un parámetro adicional a dump() así:
json.dump(country, f, indent=4)
Si agrega este parámetro al archivo que guardó y lo ejecuta, verá que el archivo .json ahora tendrá el formato siguiente:
{
“languages”: [ “French” ], “president”: “Emmanuel Macron”, “name”: “France”, “population”: 65640482 } |
Como puede ver, todo tiene una sangría de cuatro espacios. Es interesante notar que el argumento sangría también está disponible para dumps().
Diferencia entre cargar y volcar en el módulo json
El módulo json no es muy complicado: sólo tiene cuatro métodos principales. Hemos cubierto cargas() y carga() en esta publicación.
Hay dos métodos más, dump() y dumps(), que le permiten trabajar con JSON en Python. Estas funciones le permiten escribir datos en archivos y cadenas, respectivamente. Así como la "s" en el método "loads" significa "cadena", la "s" en "dumps" también significa cadena.
Recordar el significado de la "s" es una excelente manera de recordar qué método se puede utilizar para cada tarea.
Conclusión
Entonces, con esta guía a mano, has aprendido cómo leer y analizar datos JSON en Python. Aprender a trabajar con JSON usando Python es esencial si trabaja con sitios web, ya que se utiliza para transferir datos prácticamente a todas partes. Además de las bases de datos y las API, JSON también se utiliza en web scrapers.
Si está trabajando en un sitio web dinámico, es probable que esté intentando implementar el web scraping. Con su conocimiento de JSON, estará listo para crear secuencias de comandos de páginas con desplazamiento infinito.