
npm install quicktype

!Build status
quicktype generates strongly-typed models and serializers from JSON, JSON Schema, TypeScript, and GraphQL queries, making it a breeze to work with JSON type-safely in many programming languages.
- Try quicktype in your browser.
- Read 'A first look at quicktype' for more introduction.
- If you have any questions, check out the FAQ first.
| JSON | JSON API URLs | JSON Schema |
| ---- | ------------- | ----------------------------------------------------- |
| TypeScript | GraphQL queries |
| ---------- | --------------- |
| Ruby | JavaScript | Flow | Rust | Kotlin |
| ---------------------------------------- | -------------------------------------------- | ---------------------------------------- | ---------------------------------------- | -------------------------------------------- |
| Dart | Python | C# | Go | C++ |
| ---------------------------------------- | -------------------------------------------- | ------------------------------------ | ------------------------------------ | -------------------------------------- |
| Java | Scala | TypeScript | Swift | Objective-C | Elm |
| ---------------------------------------- | ------------------------------------------- | -------------------------------------------- | ------------------------------------------ | ----------------------------------------------- | -------------------------------------- |
| JSON Schema | Pike | Prop-Types | Haskell | PHP |
| ------------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------- | ---------------------------------------------- | -------------------------------------- |
_Missing your favorite language? Please implement it!_
There are many ways to use quicktype. app.quicktype.io is the most powerful and complete UI. The web app also works offline and doesn't send your sample data over the Internet, so paste away!
For the best CLI, we recommend installing quicktype globally via npm:
``bash`
npm install -g quicktype
`bashRun quicktype without arguments for help and options
quicktype
$3
The recommended way to use
quicktype is to generate a JSON schema from sample data, review and edit the schema, commit the schema to your project repo, then generate code from the schema as part of your build process:`bash
First, infer a JSON schema from a sample.
quicktype pokedex.json -l schema -o schema.jsonReview the schema, make changes,
and commit it to your project repo.
Finally, generate model code from schema in your
build process for whatever languages you need:
quicktype -s schema schema.json -o src/ios/models.swift
quicktype -s schema schema.json -o src/android/Models.java
quicktype -s schema schema.json -o src/nodejs/Models.tsAll of these models will serialize to and from the same
JSON, so different programs in your stack can communicate
seamlessly.
`$3
You can achieve a similar result by writing or generating a TypeScript file, then quicktyping it. TypeScript is a typed superset of JavaScript with simple, succinct syntax for defining types:
`typescript
interface Person {
name: string;
nickname?: string; // an optional property
luckyNumber: number;
}
`You can use TypeScript just like JSON schema was used in the last example:
`bash
First, infer a TypeScript file from a sample (or just write one!)
quicktype pokedex.json -o pokedex.ts --just-types
Review the TypeScript, make changes, etc.
quicktype pokedex.ts -o src/ios/models.swift
`$3
You can use
quicktype as a JavaScript function within node or browsers. First add the quicktype-core package:`bash
$ npm install quicktype-core
`In general, first you create an
InputData value with one or more JSON samples, JSON schemas, TypeScript sources, or other supported input types. Then you call quicktype, passing that InputData value and any options you want.`javascript
import {
quicktype,
InputData,
jsonInputForTargetLanguage,
JSONSchemaInput,
FetchingJSONSchemaStore
} from "quicktype-core";async function quicktypeJSON(targetLanguage, typeName, jsonString) {
const jsonInput = jsonInputForTargetLanguage(targetLanguage);
// We could add multiple samples for the same desired
// type, or many sources for other types. Here we're
// just making one type from one piece of sample JSON.
await jsonInput.addSource({
name: typeName,
samples: [jsonString]
});
const inputData = new InputData();
inputData.addInput(jsonInput);
return await quicktype({
inputData,
lang: targetLanguage
});
}
async function quicktypeJSONSchema(targetLanguage, typeName, jsonSchemaString) {
const schemaInput = new JSONSchemaInput(new FetchingJSONSchemaStore());
// We could add multiple schemas for multiple types,
// but here we're just making one type from JSON schema.
await schemaInput.addSource({ name: typeName, schema: jsonSchemaString });
const inputData = new InputData();
inputData.addInput(schemaInput);
return await quicktype({
inputData,
lang: targetLanguage
});
}
async function main() {
const { lines: swiftPerson } = await quicktypeJSON("swift", "Person", jsonString);
console.log(swiftPerson.join("\n"));
const { lines: pythonPerson } = await quicktypeJSONSchema("python", "Person", jsonSchemaString);
console.log(pythonPerson.join("\n"));
}
main();
`The argument to
quicktype is a complex object with many optional properties. Explore its definition to understand what options are allowed.$3
Quicktype supports creating your own custom languages and rendering output, you can extend existing classes or create your own to be using by the
quicktype function.
Check out this guide for more info.Contributing
quicktype is Open Source and we love contributors! In fact, we have a list of issues that are low-priority for us, but for which we'd happily accept contributions. Support for new target languages is also strongly desired. If you'd like to contribute, need help with anything at all, or would just like to talk things over, come join us on Slack.$3
quicktype is implemented in TypeScript and requires nodejs and npm to build and run.First, install
typescript globally via npm:Clone this repo and do:
#### macOS / Linux
`bash
nvm use
npm install
script/quicktype # rebuild (slow) and run (fast)
`#### Windows
`bash
npm install --ignore-scripts # Install dependencies
npm install -g typescript # Install typescript globally
tsc --project src/cli # Rebuild
node dist\cli\index.js # Run
`$3
Install Visual Studio Code, open this
workspace, and install the recommended extensions:
`bash
code . # opens in VS Code
`$3
When working on an output language, you'll want to view generated
output as you edit. Use
npm start to watch for changes and
recompile and rerun quicktype for live feedback. For example, if you're
developing a new renderer for fortran, you could use the following command to
rebuild and reinvoke quicktype as you implement your renderer:`bash
npm start -- "--lang fortran pokedex.json"
`The command in quotes is passed to
quicktype, so you can render local .json
files, URLs, or add other options.$3
`bash
Run full test suite
npm run testTest a specific language (see test/languages.ts)
FIXTURE=golang npm testTest a single sample or directory
FIXTURE=swift npm test -- pokedex.json
FIXTURE=swift npm test -- test/inputs/json/samples
``