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