Skip to content
jsonforge.app

JSON to Code

Generate TypeScript, Go, Python, Java, Kotlin, Rust, C#, or PHP types from JSON.

JSON input

Loading editor…

Generated code

Enter JSON on the left to generate a type from it.

What is JSON to Code?

A JSON to Code generator inspects a JSON document's actual shape — its keys, nesting, and value types — and produces a matching type definition in a programming language of your choice: a TypeScript interface, a Go struct, a Python TypedDict, a Java record, a Kotlin data class, a Rust struct, a C# record, or a PHP class. This saves the tedious, error-prone step of hand-transcribing an API response or config file into typed code every time the shape of that data changes. Rather than writing (and constantly re-writing) type definitions by hand whenever an upstream JSON payload gains a field or changes a value's type, you paste the JSON once and get an accurate starting point in the target language, with nested objects and arrays turned into their own named types.

How to use JSON to Code

  1. Paste or type a representative JSON document into the left panel — the more complete the sample (all optional fields present, arrays with at least one item), the more complete the generated type will be.
  2. Pick a target language from the dropdown above the output — TypeScript, Go, Python, Java, Kotlin, Rust, C#, or PHP.
  3. Optionally set a root type name (defaults to "Root") — nested object types are named after the key that contains them.
  4. Copy the generated code from the right panel directly into your project.

Examples

Flat object → TypeScript

Input

{"id": 1, "name": "Ada", "active": true}

Output

interface Root { id: number; name: string; active: boolean; }

Nested object → Go struct

Input

{"user": {"id": 1, "name": "Ada"}}

Output

type Root struct { User RootUser `json:"user"` } type RootUser struct { Id int `json:"id"` Name string `json:"name"` }

Common mistakes

  • Pasting a JSON sample that's missing optional fields — the generated type will simply omit fields it never saw, so an incomplete sample produces an incomplete type.
  • Expecting exact numeric types (int vs. float, or specific bit widths) to be inferred — most languages here get a general-purpose numeric type instead of a guessed precision.
  • Forgetting to rename the root type — if you're generating multiple related types in the same file, give each generation a distinct root name to avoid a naming collision.

Why use this tool

  • Runs entirely client-side — no JSON you paste here is ever sent to a server.
  • Covers eight languages from one input, so you don't need a separate tool per target language.
  • Nested objects and arrays get properly named sub-types instead of being flattened or left untyped.

Frequently asked questions