Troubleshooting

SharePoint column formatting JSON not working? Start here

The JSON saved without complaint, but the column looks exactly like it did before. Here are the eight causes behind almost every "nothing happened", in the order to check them.

Column formatting in SharePoint and Microsoft Lists fails quietly. A wrong field name, a column missing from the view, a style SharePoint doesn't support — none of these produce an error. The JSON is accepted, saved, and then draws the plain value as if you'd never touched it. That silence is what makes it frustrating, and it's also why a fixed checklist works: the causes are few, and they're easy to rule out one at a time.

If you can't even find Format this column, that's a different problem: the option only exists in the modern list experience, and you need permission to edit the list's settings. Everything below assumes you've pasted JSON and it saved.

What "not working" usually looks like

ItemStatus
Q1 launch planCompleted
Onboarding flowIn Progress
Brand refreshBlocked
A pill formatter was saved on this column — but it references [$ProjectStatus] and the internal name is Status, so SharePoint draws plain text
Get a known-good test formatter → Opens the generator on the simplest template. Paste it on a Choice column: if a colored pill appears, the pipeline works and the problem is inside your own JSON.

A minimal formatter that proves the pipeline works

Before debugging your real JSON, paste this on the column. It uses @currentField instead of a field name, so it can't be wrong about the name — if the cell doesn't turn pale yellow, the problem is outside the JSON (wrong list, cached page, permissions), and if it does, keep reading:

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "div",
  "txtContent": "@currentField",
  "style": { "background-color": "#fff4ce", "padding": "4px 8px" }
}

Once the test formatter works, put your real JSON back and work through the list below. The first two causes account for most cases.

Work through these in order

  1. 1. The field name is the display name, not the internal name. [$Due Date] never matches anything; the internal name is probably Due_x0020_Date, or something else entirely if the column was renamed. This is the single most common cause. The internal field name guide has a finder that reads the name out of your column-settings URL.
  2. 2. The JSON references a column that isn't in the view. Any [$OtherColumn] resolves only if that column is included in the same view — Microsoft documents this explicitly. A formatter on Notes that tests Status does nothing until Status is added to the view. You can make it narrow; it has to be present.
  3. 3. You're looking at a cached page or a different list. Hard-refresh with Ctrl+F5. Check you're in the list you formatted, not a copy or a lookup source. And note that Format this column and Format current view are separate features — JSON pasted into one doesn't appear in the other.
  4. 4. The JSON itself is invalid. A trailing comma after the last property, a missing bracket, or curly "smart quotes" picked up from Word, Outlook, or Teams all break parsing. SharePoint shows a red message under the box for these; if you see one, fix that first. JSON from the generator is straight-quoted, but anything that passed through an email may not be.
  5. 5. A value doesn't match exactly. Comparisons are case-sensitive and include spaces: 'Done' is not 'done', and 'In Progress ' with a trailing space matches nothing. Copy values from the column's settings rather than retyping them, and check for stray whitespace.
  6. 6. A style property isn't supported, so SharePoint dropped it. SharePoint applies only the CSS properties on its supported list and silently ignores the rest. The background shorthand is not supported (background-color is); gap isn't (use margins); transform allows only translate. If one part of the formatter renders and another doesn't, an unsupported property is the likely reason.
  7. 7. An object-type column is used as if it were text. Person, lookup, and similar columns are objects with properties. [$AssignedTo] on its own won't give you a name — use [$AssignedTo.title]; for a lookup, use [$Category.lookupValue]. The person column guide lists every property.
  8. 8. Empty values are being compared. An empty date column evaluates as the epoch, so any "days overdue" arithmetic reads it as decades late; an empty number evaluates as 0. If the formatter "works" but blank rows look alarming, test for [$Field] == '' before comparing. The generator's date templates already do this.
Most common reason it doesn't work: cause 1 — the field name must match your column's internal name, which can differ from the display name (a column shown as "Project Status" might be ProjectStatus or Project_x0020_Status internally). See the internal field name guide to find yours.

Common questions

It works in Preview but is gone after I save — why?
Preview draws your JSON in the current page immediately; Save writes it to the column. If it vanishes after saving, the page usually reloaded a cached copy — hard-refresh with Ctrl+F5. If it is still gone, re-open Format this column and check the JSON is actually in the box; if the box is empty or shows the old JSON, the save did not go through, so paste again and watch for a red error under the box.
Why is a person or lookup column blank after formatting?
Person and lookup columns are objects, not text. Reference a property — [$AssignedTo.title] or [$AssignedTo.email] for people, [$Category.lookupValue] for lookups — instead of the bare column, and make sure the column is in the view.
Does formatting change the data or affect Power Automate?
No. Column formatting only changes how cells are drawn in the browser. Stored values, sorting, filtering, exports, and flows are unaffected — which also means a broken formatter never damages data; at worst the column looks plain.
Where exactly do I paste the JSON?
Open the list, click the column header, then Column settings → Format this column → Advanced mode. Delete whatever is in the box, paste the JSON, click Preview to check, then Save. Format this column only exists in the modern list experience, and you need permission to edit the list's settings.