100 % locale — i tuoi dati non lasciano mai il tuo browser

JSON in Prisma — un modello che migra

Trasforma un campione JSON in un modello Prisma. L’identificatore che ogni modello richiede c’è sempre: prisma validate passa e la migrazione parte.

Istantaneo Privato Zero cookie

Input JSON

Output Prisma

Che cosa fa questo strumento

Un campione JSON diventa un modello Prisma.

{ "id": 1, "name": "Ada", "tags": ["admin"], "score": 9.5 }
model Root {
  id    Int      @id
  name  String
  tags  String[]
  score Float
}

Il modello da solo non è uno schema.prisma: un file funzionante ha anche un blocco datasource e uno generator. Descrivono il tuo database e il tuo client, di cui un carico JSON non dice nulla.

Ogni modello riceve un identificatore

Prisma rifiuta un modello senza @id (o @@id): prisma validate si ferma lì. Quindi:

  • un id di tipo Int o String diventa l’identificatore;
  • nessun id e ne viene aggiunto uno: id Int @id @default(autoincrement());
  • un id di altro tipo — decimale, booleano, oggetto annidato — è rinominato e tiene la sua chiave originale:
model Root {
  id   Int    @id @default(autoincrement())
  id2  Float  @map("id")
  name String
}

Quest’ultimo caso produceva un modello senza alcun identificatore: Prisma dall’aria valida che lo strumento a riga di comando rifiuta. Trovato scrivendo questa pagina e corretto.

Nulla che somigli a una relazione viene inventato

Un oggetto annidato diventa una colonna Json. Poteva essere una relazione verso un’altra tabella, e indovinare vorrebbe dire inventare un modello, una chiave esterna e un verso a partire da un documento. Lo stesso per un array di oggetti e per un array eterogeneo.

Una lista omogenea di scalari riceve invece una lista nativa — String[], Int[] — che esiste su PostgreSQL, CockroachDB e MongoDB. Su MySQL o SQLite, cambiala in Json: l’uscita non ha datasource, quindi non può sapere quale usi.

Nomi, annullabilità, e ciò che un campione non dice

I nomi dei campi passano in camelCase, e @map conserva la chiave originale appena le due differiscono: content-type diventa contentType @map("content-type") e il nome della tua colonna non cambia. Due chiavi che danno lo stesso camelCase prendono un suffisso invece di fondersi.

Solo null produce una colonna opzionale, Json?. Tutto il resto è obbligatorio, perché il campione aveva un valore — e un campione è il posto sbagliato per scoprire che una colonna ammette nulli. Il ? è un carattere, ed è tuo.

Privato per progettazione

Tutto viene eseguito localmente nel browser con JavaScript. I tuoi dati non vengono mai caricati, quindi lo strumento è sicuro per contenuti sensibili e funziona anche offline.

Domande frequenti

Da dove viene l’`id Int @id @default(autoincrement())`?
Dalla regola di Prisma: ogni modello richiede un identificatore. Se il tuo campione ha un `id` intero o stringa, è quello. Altrimenti ne viene aggiunto uno, e un `id` di altro tipo è rinominato con `@map("id")` perché la chiave originale sopravviva. Senza, il modello sembrava giusto e `prisma validate` lo rifiutava.
Perché il mio oggetto annidato è una colonna `Json` e non una relazione?
Perché un campione non può mostrare una relazione. `{"author": {"name": "Ada"}}` può essere una chiave esterna verso una tabella `Author` o un blocco che appartiene alla riga. Inventare tabella, chiave e verso sarebbero tre supposizioni. `Json` conserva il dato e lascia a te la modellazione, che è tua.
`String[]` non compila su MySQL. Perché c’è?
Perché una lista omogenea di scalari ha un tipo nativo su PostgreSQL, CockroachDB e MongoDB, e Prisma la scrive `String[]`. MySQL e SQLite non hanno liste scalari: lì cambia il campo in `Json`. Il generatore non può conoscere la tua sorgente dati — nell’uscita non c’è alcun blocco `datasource`.

Convertitori correlati