JSON Field
Proporciona mecanismos para almacenar datos JSON en campos de Drupal con varios tipos de campo, widgets y formateadores para editar y mostrar contenido JSON.
json_field
Install
composer require 'drupal/json_field:8.x-1.7'
composer require 'drupal/json_field:8.x-1.3'
Overview
JSON Field es un módulo completo que permite el almacenamiento de datos JSON dentro de campos de entidad de Drupal. Proporciona tres tipos de campo distintos optimizados para diferentes backends de base de datos y casos de uso: una opción de almacenamiento basada en texto compatible con todas las bases de datos, y dos opciones de almacenamiento JSON nativo que aprovechan los tipos de columna JSON específicos de la base de datos para MySQL, PostgreSQL, MariaDB y SQLite.
El módulo incluye validación para asegurar que solo se pueda guardar JSON válido, múltiples formateadores de visualización para ver datos JSON, y capacidades de edición mejoradas opcionales a través del widget WYSIWYG de JSON Editor. Se integra perfectamente con Views para mostrar datos JSON en listados, soporta el módulo Feeds para importar contenido JSON, y funciona con el módulo Diff para comparar revisiones de campos JSON.
Para la integración con JSON:API, el módulo puede configurarse con JSON:API Extras para generar JSON sin procesar en lugar de cadenas escapadas, lo que lo hace ideal para implementaciones de Drupal headless y arquitecturas API-first.
Features
- Tres tipos de campo JSON con diferentes backends de almacenamiento: basado en texto (VARCHAR/TEXT), JSON nativo y JSONB/JSON para almacenamiento optimizado en base de datos
- Validación automática de JSON para asegurar que solo se puedan guardar datos JSON válidos en los campos
- Widget de área de texto simple para edición básica de JSON con widget WYSIWYG opcional de JSON Editor para una experiencia de edición mejorada
- Múltiples formateadores de visualización incluyendo texto plano con biblioteca JSONView opcional y formateador Pretty legible por humanos
- Integración con Views con manejador especial de campo de datos JSON para exportaciones REST
- Soporte para validación de JSON Schema al usar el submódulo del widget JSON Editor
- Integración con el módulo Feeds para importar datos JSON desde fuentes externas
- Integración con el módulo Diff para comparar revisiones de campos JSON entre versiones de entidades
- Normalizador de serialización personalizado para salida JSON apropiada en contextos REST y JSON:API
- Opciones configurables de tamaño de almacenamiento de campo (255 caracteres a 1GB) para almacenamiento basado en texto
Use Cases
Almacenamiento de datos de respuesta de API
Almacena respuestas completas de API de servicios externos en campos JSON para caché, auditoría o procesamiento posterior. Los tipos de campo JSON nativo permiten consultas a nivel de base de datos de los datos almacenados en bases de datos compatibles.
Atributos de contenido flexibles
Añade atributos dinámicos sin esquema a tipos de contenido sin crear campos adicionales. Almacena especificaciones de productos, metadatos de eventos o preferencias de usuario como objetos JSON que pueden variar entre entidades.
Almacenamiento de configuración para funcionalidad personalizada
Almacena datos de configuración complejos para módulos personalizados o integraciones. Usa la validación de JSON Schema en el widget del editor para asegurar que la configuración cumpla con la estructura esperada.
Datos de API para Drupal headless
Proporciona datos JSON estructurados a través de los endpoints REST o JSON:API de Drupal para aplicaciones frontend desacopladas. El normalizador personalizado y la integración con JSON:API Extras aseguran una salida JSON apropiada.
Preparación de datos para migración
Almacena temporalmente datos complejos durante migraciones antes de procesarlos en estructuras finales de Drupal. Los campos JSON pueden contener datos anidados que requerirían múltiples entidades relacionadas en el esquema final.
Almacenamiento de datos de constructor de formularios
Almacena definiciones de formularios, preguntas de encuestas o datos de cuestionarios como JSON. Los modos de editor de árbol y formulario facilitan a los editores de contenido gestionar estructuras de datos anidadas sin escribir JSON sin procesar.
Tips
- Usa el tipo de campo JSON (texto) para máxima compatibilidad de base de datos; usa tipos JSON nativos solo cuando necesites consultas JSON a nivel de base de datos
- Configura la opción 'Espacio máximo permitido' apropiadamente para evitar usar más recursos de base de datos de los necesarios
- El formateador Pretty no requiere bibliotecas externas y es ideal para necesidades simples de visualización JSON
- Habilita la validación de JSON Schema en el widget del editor para aplicar requisitos de estructura de datos en casos de uso complejos
- MariaDB almacena JSON en columnas LONGTEXT pero aún soporta operaciones de consulta JSON contra los datos
- Al usar con exportaciones REST de Views, selecciona el campo con sufijo '(data)' para generar JSON sin procesar en lugar de cadenas
Technical Details
Troubleshooting 6
Instala el módulo JSON:API Extras, sobrescribe el tipo de recurso en admin/config/services/jsonapi/resource_types, y selecciona 'JSON Field' como el mejorador para el campo JSON.
Asegúrate de que la biblioteca jquery-jsonview esté instalada en /libraries/jquery-jsonview/dist/ con los archivos jquery.jsonview.js y jquery.jsonview.css presentes.
Habilita el submódulo JSON Field Widget, instala la biblioteca jsoneditor en /libraries/jsoneditor/dist/, y cambia el widget del campo a 'Editor WYSIWYG específico para JSON' en la configuración de visualización de formularios.
Verifica que la versión de tu base de datos cumpla con los requisitos mínimos: MySQL 5.7.8+, MariaDB 10.2.7+, PostgreSQL 9.2+, o SQLite 3.26+. Para tipos de campo JSON nativo, la base de datos debe soportar columnas JSON.
Esto se corrigió en la versión 8.x-1.6. Actualiza a la última versión para resolver problemas de validación de esquema con campos no requeridos vacíos.
El script de exportación de base de datos del núcleo de Drupal no soporta completamente los tipos de campo JSON. Sigue el progreso en los issues del núcleo #3343634 (META), #3143512 (MySQL/MariaDB), #2472709 (PostgreSQL), y #3325871 (SQLite).
Security Notes 4
- Los datos JSON se validan antes de guardar para asegurar que solo se pueda almacenar JSON válido
- El módulo usa el servicio de serialización de Drupal para codificación/decodificación JSON, siguiendo las mejores prácticas de seguridad
- La validación de JSON Schema (cuando está habilitada) proporciona una capa adicional de verificación de integridad de datos
- Los permisos a nivel de campo se controlan a través de los mecanismos estándar de acceso a campos de Drupal