Neatbo.

JSON samples to schema skeleton

Merge strict JSON sample shapes into an editable Draft 2020-12 type skeleton with sources and inference evidence.

Browser-local processingInputStrict UTF-8 JSON samplesOutputDraft 2020-12 Schema + reportUp to 1 MiB per file · File limit: 20
  1. 1Add input
  2. 2Adjust settings
  3. 3Get your result

Tool input and files are processed in this browser without being uploaded.

Your input

Inputs are kept temporarily in this tab when switching tools. Refreshing or closing clears them; large results may need to be regenerated.

⌘ / Ctrl + Enter to run

or drag and drop them here

Files stay on this device. Your originals stay unchanged.

.json

Up to 1 MiB per file · File limit: 20

    0 characters · 0 bytes
    Options

    Complete the required options first. You can keep the defaults for the rest.

    Sample inference only; confirm against the API contract.

    Preparing the tool…

    Before you start

    Merge strict JSON sample shapes into an editable Draft 2020-12 type skeleton with sources and inference evidence.

    How to use this tool

    1. Paste one JSON sample or select all original sample files.
    2. Keep properties optional by default; enable observed required keys only deliberately.
    3. Generate and download the schema and full inference report.
    4. Confirm absent fields, business rules and required keys with the API owner, then edit and validate.

    Supported inputs and limits

    Paste one strict JSON value up to 1 MiB, or select 1–20 strict UTF-8 JSON files up to 1 MiB each and 4 MiB together. Each original filename label allows 512 UTF-8 bytes as an input resource budget, not an operating-system PATH_MAX claim. Selected files take priority. One file is one sample; a root array stays one array sample.

    One leading BOM per file is removed and recorded; pasted input cannot have a BOM. Reject decoded duplicate keys, malformed UTF-8, non-JSON syntax and raw/escaped unpaired Unicode surrogates. __proto__ and constructor remain literal properties.

    Across all samples allow 100,000 value nodes, excluding object keys, and 64 container levels. Outputs together allow 32 MiB; refusal or cancellation returns no partial output.

    Merge type unions, object properties and array item shapes. Every numeric token infers number without converting its value to JavaScript Number. No integer, format, range, enum, const or default inference.

    Required is omitted by default. Only an explicit checkbox infers keys present in every observed object at that shape; the report labels this sample inference. Objects stay open; empty arrays without observed items omit items.

    Download complete schema.json and inference-report.json with every source name, byte length, SHA256, shape observation counts, BOM and limitations. No external references are generated or fetched and input schemas are not executed.

    The screen previews 4,000 Unicode codepoints; copy and download retain the full schema. This editable skeleton does not prove a complete API contract; review against authoritative requirements before publishing. Inputs stay in this browser.

    Worked example

    Example input

    {"id":9007199254740993,"items":[]}
    Example options
    requireObserved=false

    Example output

    {"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"id":{"type":"number"},"items":{"type":"array"}}}

    When something does not work

    Correct duplicate keys, encoding or syntax; reduce over-budget samples and rerun with the same options. Cancellation publishes no partial schema.

    Frequently asked questions

    Is this a complete production API schema?

    The screen previews 4,000 Unicode codepoints; copy and download retain the full schema. This editable skeleton does not prove a complete API contract; review against authoritative requirements before publishing. Inputs stay in this browser.

    Why is a large integer inferred as number?

    Merge type unions, object properties and array item shapes. Every numeric token infers number without converting its value to JavaScript Number. No integer, format, range, enum, const or default inference.

    Related tools