quicktype
генерирует строго типизированные модели и сериализаторы на основе запросов JSON, JSON Schema, TypeScript и GraphQL, что упрощает работу с безопасным типом JSON во многих языках программирования.
quicktype
в браузере.JSON | URL-адреса API JSON | Схема JSON |
---|
Машинопись | GraphQL-запросы |
---|
Руби | JavaScript | Поток | Ржавчина | Котлин |
---|
Дарт | Питон | С# | Идти | С++ |
---|
Ява | Скала | Машинопись | Быстрый | Цель-C | Вяз |
---|
Схема JSON | Щука | Типы опор | Хаскелл | PHP |
---|
Скучаете по любимому языку? Пожалуйста, реализуйте это!
Есть много способов использовать quicktype
. app.quicktype.io — самый мощный и полный пользовательский интерфейс. Веб-приложение также работает в автономном режиме и не отправляет образцы данных через Интернет, поэтому вставьте их!
Для лучшего CLI мы рекомендуем установить quicktype
глобально через npm
:
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
из JavaScript Вы можете использовать quicktype
как функцию JavaScript в node
или браузерах. Сначала добавьте пакет quicktype-core
:
$ npm install quicktype-core
Как правило, сначала вы создаете значение InputData
с одним или несколькими образцами JSON, схемами JSON, источниками TypeScript или другими поддерживаемыми типами ввода. Затем вы вызываете 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
.
Сначала установите typescript
глобально через npm
:
Клонируйте этот репозиторий и выполните:
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