quicktype
从 JSON、JSON Schema、TypeScript 和 GraphQL 查询生成强类型模型和序列化器,使得在许多编程语言中轻松地安全地使用 JSON 类型。
quicktype
。JSON | JSON API URL | JSON 模式 |
---|
打字稿 | GraphQL 查询 |
---|
红宝石 | JavaScript | 流动 | 锈 | 科特林 |
---|
镖 | Python | C# | 去 | C++ |
---|
爪哇 | 斯卡拉 | 打字稿 | 迅速 | Objective-C | 榆树 |
---|
JSON 模式 | 派克 | 道具类型 | 哈斯克尔 | PHP |
---|
缺少您最喜欢的语言?请执行!
使用quicktype
的方法有很多种。 app.quicktype.io 是最强大、最完整的 UI。该网络应用程序还可以离线工作,并且不会通过 Internet 发送您的示例数据,因此请粘贴!
为了获得最佳的 CLI,我们建议通过npm
全局安装quicktype
:
npm install -g quicktype
quicktype
# Run quicktype without arguments for help and options
quicktype
# quicktype a simple JSON object in C#
echo ' { "name": "David" } ' | quicktype -l csharp
# quicktype a top-level array and save as Go source
echo ' [1, 2, 3] ' | quicktype -o ints.go
# quicktype a sample JSON file in Swift
quicktype person.json -o Person.swift
# A verbose way to do the same thing
quicktype
--src person.json
--src-lang json
--lang swift
--top-level Person
--out Person.swift
# quicktype a directory of samples as a C++ program
# Suppose ./blockchain is a directory with files:
# latest-block.json transactions.json marketcap.json
quicktype ./blockchain -o blockchain-api.cpp
# quicktype a live JSON API as a Java program
quicktype https://api.somewhere.com/data -o Data.java
使用quicktype
的推荐方法是从示例数据生成 JSON 架构,检查并编辑架构,将架构提交到项目存储库,然后在构建过程中从架构生成代码:
# First, infer a JSON schema from a sample.
quicktype pokedex.json -l schema -o schema.json
# Review 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.ts
# All of these models will serialize to and from the same
# JSON, so different programs in your stack can communicate
# seamlessly.
您可以通过编写或生成 TypeScript 文件,然后快速输入来实现类似的结果。 TypeScript 是 JavaScript 的类型化超集,具有简单、简洁的语法来定义类型:
interface Person {
name : string ;
nickname ?: string ; // an optional property
luckyNumber : number ;
}
您可以使用 TypeScript,就像上一个示例中使用 JSON 模式一样:
# 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
quicktype
您可以在node
或浏览器中将quicktype
用作JavaScript函数。首先添加quicktype-core
包:
$ npm install quicktype-core
一般来说,首先使用一个或多个 JSON 示例、JSON 架构、TypeScript 源或其他支持的输入类型创建一个InputData
值。然后您调用quicktype
,传递该InputData
值和您想要的任何选项。
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 ( ) ;
quicktype
的参数是一个具有许多可选属性的复杂对象。探索其定义以了解允许哪些选项。
quicktype
是开源的,我们喜欢贡献者!事实上,我们有一系列问题,这些问题对我们来说不是优先考虑的,但我们很乐意接受这些贡献。我们还强烈希望支持新的目标语言。如果您想做出贡献、需要任何帮助,或者只是想讨论问题,请加入我们的 Slack。
quicktype
在 TypeScript 中实现,需要nodejs
和npm
来构建和运行。
首先,通过npm
全局安装typescript
:
克隆此存储库并执行以下操作:
nvm use
npm install
script/quicktype # rebuild (slow) and run (fast)
npm install --ignore-scripts # Install dependencies
npm install -g typescript # Install typescript globally
tsc --project src/cli # Rebuild
node dist c li i ndex.js # Run
安装 Visual Studio Code,打开此工作区,然后安装推荐的扩展:
code . # opens in VS Code
使用输出语言时,您需要在编辑时查看生成的输出。使用npm start
来观察更改并重新编译并重新运行quicktype
以获取实时反馈。例如,如果您正在为fortran
开发新的渲染器,则可以在实现渲染器时使用以下命令来重建并重新调用quicktype
:
npm start -- " --lang fortran pokedex.json "
引号中的命令将传递给quicktype
,因此您可以呈现本地.json
文件、URL 或添加其他选项。
# Run full test suite
npm run test
# Test a specific language (see test/languages.ts)
FIXTURE=golang npm test
# Test a single sample or directory
FIXTURE=swift npm test -- pokedex.json
FIXTURE=swift npm test -- test/inputs/json/samples