json
The json widget renders a JSON field as formatted, read-only text. It takes no options at all, and you almost never write it in a view, because Odoo applies it automatically to every json field.
September 18, 2026Updated September 18, 20264 min read
| Technical name | json |
|---|---|
| Field types | json |
| Views | form, list |
| Module | web, present in every Odoo database |
| Used in core | 0 explicit widget="json" attributes in Odoo 19 Community or Enterprise. It still renders on every json field through the type fallback described below. |
| Versions | Odoo 19.0, Odoo 20.0 |
| No-code setup | No. This widget has no Studio entry and no options to configure. |
| Alternatives | text, code, properties, contact_statistics |
What the json widget does
What this means for your team
Working examples
Why this widget has zero recorded uses and still renders everywhere
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 19.0 | Verified | Verified against the shipped 19.0 source. |
| Odoo 20.0 | Verified | Verified against the 20.0 branch. No changes. |
The widget has been stable for several releases. We verified the 19.0 and 20.0 branches directly and the descriptor is byte-for-byte the same shape: no options added, no options removed, no registration changes.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| The field shows nothing at all | The stored value is null or an empty object. The widget renders whatever formatJson returns and adds no placeholder. Check the stored value on the record. An empty json field is legitimately blank. |
| Users cannot edit the value | Working as designed. The json widget has no input element. Use a text field with the code widget for an editable blob, or split the data into real fields. |
| An options dictionary on the field appears to be ignored | It is ignored. This widget declares no supported options and reads none. Remove the options attribute. If you need configurable rendering, you need a custom widget. |
Json widget vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
json | Read-only display of an opaque JSON payload | No options and no input: it prints the value and stops |
| text | Long free text a user must edit | Editable, with no JSON formatting |
| code | An editable blob with syntax highlighting | Ace editor, takes a mode option, works on text and html fields |
| properties | Per-record custom fields users define themselves | Structured and editable, with a real field definition behind it |
| contact_statistics | A json field holding a list to display as statistics | Also json and read-only, but renders a list rather than raw text |
Frequently asked questions
Can I edit a json field in Odoo?+
Why does my json field render without a widget attribute?+
Does the Odoo json widget have any options?+
Does the json widget change in Odoo 20?+
A JSON blob where fields should be?
Opaque payloads on a form usually mean data is being stored in a shape nobody can report on. We model it properly: real fields, real filters, real exports, without losing the raw payload you keep for audit. Odoo 16 through 19, and we are already testing against 20.
Talk to an Odoo consultant