2.28. JSON¶
JSON (JavaScript Object Notation) es un formato de texto compacto y legible para datos estructurados. Define seis tipos – string, number, boolean, null, array y object – cada uno de los cuales se corresponde directamente con un valor de Python, de modo que convertir entre Python y JSON es una sola llamada a función en cualquier dirección.
JSON es la lingua franca de los archivos de configuración y las API web. Recurre a él siempre que necesites guardar un pequeño conjunto de ajustes en disco en una forma que también puedas leer a simple vista, o intercambiar datos estructurados con otro programa.
Dos funciones cubren la mayoría de las necesidades:
json.dumps()– dump string: convierte un valor de Python en una cadena JSON.json.loads()– load string: analiza una cadena JSON de vuelta a Python.
El par json.dump / json.load (sin la s) hace el mismo trabajo pero toma directamente un objeto de archivo.
2.28.1. Codificación (dumps)¶
import json
config = {
"name": "OpenMV",
"width": 320,
"tags": ["red", "round"],
}
text = json.dumps(config)
print(text)
Salida:
{"name": "OpenMV", "width": 320, "tags": ["red", "round"]}
La correspondencia es:
Cualquier cosa fuera de ese conjunto (una clase personalizada, un búfer bytes, un set) lanza TypeError. Convierte el valor primero.
Nota
El json.dumps() de CPython acepta un argumento indent para una salida con formato legible; el de MicroPython no. El único ajuste de formato es separators, que controla el espaciado en línea – pasa (',', ':') para la forma más compacta. La salida multilínea e indentada hay que producirla a mano si se necesita.
2.28.2. Decodificación (loads)¶
text = '{"name": "OpenMV", "width": 320}'
config = json.loads(text)
print(config["name"], config["width"])
Salida:
OpenMV 320
Los objetos JSON se convierten en dict, los arrays en list, y el resto se corresponden de vuelta con sus equivalentes de Python. Un JSON incorrecto lanza ValueError.
2.28.3. Leer y escribir archivos¶
El par basado en archivos funciona bien con with:
import json
with open("config.json") as f:
config = json.load(f)
config["width"] = 640
with open("config.json", "w") as f:
json.dump(config, f)
Trata el archivo JSON como un registro completo – léelo, modifica el valor de Python y vuelve a escribirlo. Intentar editar JSON en su sitio dentro de un archivo normalmente crea más errores de los que ahorra.