JSON
JSON es un formato de texto compuesto por objetos, matrices y valores que se utiliza para API, anotaciones y salidas de modelos. Reglas de sintaxis, usos en ML, JSON Lines y código.
JSON, abreviatura de notación de objetos de JavaScript, es un formato ligero basado en texto para almacenar e intercambiar datos estructurados. Douglas Crockford lo especificó a principios de la década de 2000 basándose en la sintaxis de literales de objeto de JavaScript, y ahora está estandarizado como RFC 8259 del IETF y ECMA-404. JSON es independiente del lenguaje, legible para las personas y se puede analizar con la biblioteca estándar de casi todos los lenguajes de programación, lo que lo convierte en el formato predeterminado para las API web. En aprendizaje automático (ML), transporta predicciones desde los motores de inferencia, almacena anotaciones de conjuntos de datos, registra metadatos de experimentos y define las salidas estructuradas de los grandes modelos de lenguaje (LLM).
Sintaxis de JSON#
Un documento JSON se compone de dos contenedores y cuatro tipos de valores:
- Objetos: Conjuntos desordenados de pares clave-valor entre llaves, como
{"name": "bus", "confidence": 0.94}. Las claves deben ser cadenas entre comillas dobles. - Matrices: Listas ordenadas entre corchetes, como
[48.5, 398.0, 245.3, 902.1]. - Valores: Cadenas, números, los literales
true,falseynull, u objetos y matrices anidados.
El formato es estricto. No se permiten comentarios, comas finales, cadenas entre comillas simples ni los valores NaN y Infinity, aunque el módulo json de Python escribe NaN de forma predeterminada, a menos que se establezca allow_nan=False, lo que genera archivos que los analizadores estrictos rechazan. La RFC 8259 también advierte que los números solo se intercambian de forma fiable dentro del rango de precisión doble de IEEE 754, por lo que los enteros mayores que 2⁵³ − 1, como algunos identificadores de bases de datos, suelen enviarse como cadenas.
JSON en los flujos de trabajo de aprendizaje automático#
Cuando una cámara de un sistema de seguridad envía un fotograma a un servicio de detección de objetos, la capa de servicio de modelos suele responder con JSON: un registro por cada objeto detectado, con su clase, puntuación de confianza y coordenadas de la caja delimitadora, listo para paneles, aplicaciones móviles y bases de datos documentales como MongoDB.
Los formatos de anotación también se basan en JSON. El conjunto de datos COCO almacena todas las etiquetas de una partición en un único archivo JSON con tres listas principales: images, con los nombres y tamaños de los archivos; categories, con los identificadores y nombres de las clases; y annotations, donde cada entrada apunta a una imagen y una categoría mediante su identificador y almacena una caja como [x, y, width, height] en píxeles desde la esquina superior izquierda. En cambio, el formato YOLO utiliza un archivo de texto por imagen con coordenadas centrales normalizadas, y convertir de un formato a otro es un paso habitual en las canalizaciones de anotación de datos, aunque una clase de conjunto de datos personalizada también puede entrenar YOLO directamente con JSON de COCO.
JSON Lines, también llamado NDJSON, coloca un objeto JSON completo en cada línea. Así, se puede añadir contenido a los archivos, transmitirlos y dividirlos sin analizar el documento entero, algo adecuado para registros de entrenamiento, flujos de predicciones y conjuntos de datos de instrucciones que se usan para ajustar LLM. En el caso de los LLM, JSON Schema describe los campos exactos que espera una aplicación, y las salidas estructuradas y la llamada a funciones restringen el modelo para que genere JSON que se ajuste a ese esquema. GeoJSON, estandarizado como RFC 7946, aplica el formato a entidades geográficas, lo que permite que el análisis de imágenes por satélite sitúe las detecciones en un mapa.
Convertir predicciones a JSON#
Los objetos Results de Ultralytics YOLO serializan sus predicciones con to_json() y escriben un registro por detección con el nombre de clase, el identificador de clase, la confianza y las esquinas de la caja x1, y1, x2, y2, además de las coordenadas de máscara o puntos clave para los modelos de segmentación de instancias y estimación de pose. El siguiente ejemplo ejecuta YOLO26 en una imagen de muestra y vuelve a analizar el JSON con la biblioteca estándar de Python:
import json
from ultralytics import YOLO
# Carga un modelo de detección YOLO26 preentrenado y ejecuta la inferencia
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Serializa cada detección en una cadena JSON (normalize=True escalaría las cajas de 0 a 1)
json_string = result.to_json()
# Cualquier analizador JSON puede leerlo; aquí, lo convierte en una lista de diccionarios de Python
detections = json.loads(json_string)
print(json.dumps(detections[0], indent=2))El registro impreso es un objeto JSON con las claves name, class y confidence, además de un objeto anidado box que contiene las coordenadas de las esquinas en píxeles.
JSON frente a formatos relacionados#
- YAML: Un formato más legible que permite comentarios y anidamiento basado en la indentación, habitual en las configuraciones de entrenamiento y las definiciones de conjuntos de datos. YAML 1.2 está diseñado como un superconjunto de JSON, por lo que la mayoría de los documentos JSON son YAML válido.
- XML: Un formato basado en etiquetas, utilizado para las anotaciones Pascal VOC, más extenso que JSON y compatible con atributos, espacios de nombres y esquemas.
- CSV: Un formato de tabla plana y compacto para datos tabulares, pero que no permite anidar objetos ni listas.
- Formatos binarios: Protocol Buffers y MessagePack son más compactos y rápidos de analizar que JSON, pero no son legibles para las personas. Los archivos de modelos ONNX se almacenan como mensajes Protocol Buffers.










