Este módulo añade un método 'jsonify' a cada modelo del ORM. Funciona sobre el recordset actual y requiere un único argumento 'parser' que especifica el campo a extraer.
Ejemplo de un parser simple:
Para ser coherente con la API de Odoo, el método jsonify siempre devuelve una lista de objetos incluso si solo hay un elemento en el recordset.
Por defecto, la clave dentro del JSON es el nombre del campo extraído del modelo. Si necesitas especificar un nombre alternativo para usar como clave, puedes definir tu mapping de la siguiente manera en la definición del parser:
Si necesitas parsear el valor de un campo de forma personalizada, puedes pasar un callable o el nombre de un método del modelo:
Además, el módulo proporciona un método "get_json_parser" en el objeto ir.exports que genera un parser a partir de una configuración de ir.exports.
Hay más funcionalidades disponibles para usos avanzados. Define un modelo "resolver" simple que tiene un campo "python_code" y una función resolve, de modo que se pueden configurar funciones arbitrarias para transformar campos o procesar el diccionario resultante. También permite especificar un lang para extraer la traducción de cualquier campo dado.
Para usar estas funcionalidades, un parser completo sigue la siguiente estructura:
Se obtendría un resultado con esta estructura (nótese que los campos traducidos se fusionan en el mismo diccionario):
Nótese que un resolver puede pasarse como un recordset o como un id, para que sea totalmente serializable. Una versión ligeramente más simple en caso de que no se necesite la traducción de campos, pero sí otras funcionalidades como resolvers personalizados, es:
Al pasar la clave fields en lugar de langs, tenemos esencialmente el mismo comportamiento que los parsers simples, con la ventaja añadida de poder usar resolvers.
Casos de uso estándar de los resolvers son: - dar valores por defecto específicos de campo (p. ej. "" en lugar de None) - convertir el tipo de un campo (p. ej. int()) - asignar un alias a un campo concreto para una exportación específica - ...
Un parser simple simplemente se traduce a un parser completo en la exportación.
Si se proporciona el resolver global, entonces el json_dict pasa por:
Lo que permite añadir datos externos desde el contexto o transformar el diccionario si es necesario. De forma similar, si se proporciona para un campo, el resolver evalúa el resultado.
Es posible que un target tenga un marshaller terminando el target con '=list': en ese caso el resultado se coloca en una lista.
Daría como resultado la siguiente estructura JSON:
El caso de uso previsto es ser compatible con APIs que requieren que todos los parámetros traducidos se exporten simultáneamente, y que piden que las propiedades personalizadas se coloquen en un subdiccionario. Dado que a menudo algunos de estos requisitos son opcionales, se podrían cumplir nuevos requisitos sin necesidad de añadir campos ni cambiar ningún código.
Nótese que los valores exportados con el parser simple dependen del lang del registro; esto contrasta con los parsers completos, que están diseñados para ser independientes del idioma.
NOTA: este módulo se llamó base_jsonify hasta la versión 14.0.1.5.0.
Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.
auto_awesome Qué hace este módulo
Generado por IA a partir del código · Odoo 18.0Añade un motor de exportación JSON a Odoo: cualquier registro puede convertirse a JSON usando definiciones de exportación configurables, con resolvers personalizados por campo y gestión de idiomas.
Este módulo proporciona a Odoo una forma genérica de convertir registros en JSON, principalmente para integraciones y fuentes de datos.
- Una nueva pantalla "Export Resolver" (menú en Settings) permite almacenar pequeños fragmentos de Python que transforman el valor de un campo o un resultado JSON completo antes de devolverlo.
- La pantalla existente "Export Fields" se amplía: cada línea de exportación puede ahora definir un nombre de destino, un idioma, un resolver personalizado o un nombre de función, y la propia exportación puede usar un resolver global y una opción independiente del idioma.
- Reglas de negocio: una línea no puede tener a la vez un resolver y una función (error de validación); la ruta de destino debe tener la misma profundidad y referenciar los mismos campos que la ruta de origen.
- Comportamiento automático: las fechas y datetimes se convierten a texto ISO, los campos many2one/reference pasan a ser su nombre para mostrar, los one2many/many2many pasan a ser listas de nombres para mostrar, y los valores false pasan a ser null (excepto los booleanos).
- Afecta a
ir.exports,ir.exports.line, el nuevo modeloir.exports.resolvery el modelo base, añadiendo un métodojsonifydisponible en todos los modelos. - El acceso al nuevo modelo resolver está restringido a los administradores del sistema.
Depende de
Lo necesitan otros módulos
Menús que añade
Modelos y campos (4)
- base · amplía un modelo existente
- ir.exports · amplía un modelo existentelanguage_agnostic, global_resolver_id (Custom global resolver)
- ir.exports.line · amplía un modelo existenteactive, target, lang_id (Language), resolver_id (Custom resolver), instance_method_name (Function)
- ir.exports.resolver · modelo nuevoname, type, python_code
Texto generado por IA (DeepSeek) al leer el código de la versión 18.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. Ver el código en GitHub
Disponibilidad por versión
Revisado: 2026-11-03Estado de confirmación: 5 confirmadas, 4 sin información de 9 versiones.
Fuentes · Odoo 17.0
Confirmado el 2026-11-03 en la rama 17.0 de OCA/server-tools.
terminal Instalación y uso
Documentación de OCA · Odoo 18.0parámetro with_fieldname
La opción with_fieldname del método jsonify(), cuando es true, inyectará en el mismo nivel de los datos claves "_fieldname_\$field" que contendrán el nombre del campo, en el idioma del usuario actual.
> Ejemplos de uso de with_fieldname:
# example 1
parser = [('name')]
a.jsonify(parser=parser)
[{'name': 'SO3996'}]
>>> a.jsonify(parser=parser, with_fieldname=False)
[{'name': 'SO3996'}]
>>> a.jsonify(parser=parser, with_fieldname=True)
[{'fieldname_name': 'Order Reference', 'name': 'SO3996'}}]
# example 2 - with a subparser-
parser=['name', 'create_date', ('order_line', ['id' , 'product_uom', 'is_expense'])]
>>> a.jsonify(parser=parser, with_fieldname=False)
[{'name': 'SO3996', 'create_date': '2015-06-02T12:18:26.279909+00:00', 'order_line': [{'id': 16649, 'product_uom': 'stuks', 'is_expense': False}, {'id': 16651, 'product_uom': 'stuks', 'is_expense': False}, {'id': 16650, 'product_uom': 'stuks', 'is_expense': False}]}]
>>> a.jsonify(parser=parser, with_fieldname=True)
[{'fieldname_name': 'Order Reference', 'name': 'SO3996', 'fieldname_create_date': 'Creation Date', 'create_date': '2015-06-02T12:18:26.279909+00:00', 'fieldname_order_line': 'Order Lines', 'order_line': [{'fieldname_id': 'ID', 'id': 16649, 'fieldname_product_uom': 'Unit of Measure', 'product_uom': 'stuks', 'fieldname_is_expense': 'Is expense', 'is_expense': False}]}]Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen. Sin información verificada en OCA: Instalación, Configuración.
Las instrucciones de instalación, el paquete de distribución, las dependencias y los pasos de configuración no se muestran porque todavía no se han verificado en la documentación del módulo para ninguna versión.
Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.