← SkillSafe / FromJson Desk

Paste the JSON, get a Dart model that decodes it

Paste a payload your Flutter or Dart app receives. Your browser reads it the way jsonDecode does, writes a null-safe model with fromJson and toJson, and runs the model you already have against every sample to show where it throws. Free, before you sign in. Then the desk reviews your model with the fixed lines, or writes the model, its test and its fetch function, and the page runs what it wrote against your samples again.

The payloads are invented. Each example comes with a saved model reply, so you can see the whole page without signing in or spending a credit.

nothing pasted yet
Drop a .json or .ndjson file, or
nothing pasted yet
Drop a .dart file, or
Paste a payload and your model to price the review.

What this does, and what it does not

The free half is computed, not guessed. The page parses your JSON itself rather than with the browser's JSON.parse, because JSON.parse forgets what Dart remembers: in Dart, 12 decodes as an int and 12.0 as a double, and on Android or iOS as int throws on the second while as double throws on the first. A key that is missing from even one sample makes its field nullable, and it is read outside the map pattern, because a map pattern fails on an absent key whatever its type. Every rule the checker applies was observed on the Dart 3.13.4 VM and on the same code compiled to JavaScript with dart2js, and the generated models were compiled and run against their own samples.

The checker is not a Dart compiler. It follows json['key'] reads, casts, map patterns, DateTime.parse, nested fromJson calls and list conversions; anything else it says it did not check rather than guessing, and it never sees your server, only the samples you paste. Derived from the agent skill @flutter/flutter-implement-json-serialization (flutter/skills, BSD-3-Clause; see the notice). Sources are in llms.txt.