Help us shape the future of Go! Take the 2026 Go Developer Survey

json

package
v1.0.76 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 3, 2026 License: Apache-2.0 Imports: 5 Imported by: 0

README

JSON Writer

Generates database schema definitions in JSON format.

Overview

The JSON Writer converts RelSpec's internal database model representation into JSON format, providing a complete, structured representation of the database schema.

Features

  • Generates RelSpec's canonical JSON schema format
  • Complete schema representation including:
    • Databases and schemas
    • Tables, columns, and data types
    • Constraints (PK, FK, unique, check)
    • Indexes
    • Relationships
    • Views and sequences
  • Pretty-printed, human-readable output
  • Suitable for version control
  • Ideal interchange format

Usage

Basic Example
package main

import (
    "git.warky.dev/wdevs/relspecgo/pkg/models"
    "git.warky.dev/wdevs/relspecgo/pkg/writers"
    "git.warky.dev/wdevs/relspecgo/pkg/writers/json"
)

func main() {
    options := &writers.WriterOptions{
        OutputPath: "schema.json",
    }

    writer := json.NewWriter(options)
    err := writer.WriteDatabase(db)
    if err != nil {
        panic(err)
    }
}
CLI Examples
# Export PostgreSQL database to JSON
relspec --input pgsql \
  --conn "postgres://localhost/mydb" \
  --output json \
  --out-file schema.json

# Convert GORM models to JSON
relspec --input gorm --in-file models.go --output json --out-file schema.json

# Convert DBML to JSON
relspec --input dbml --in-file diagram.dbml --output json --out-file schema.json

Generated JSON Example

{
  "name": "myapp",
  "description": "",
  "database_type": "postgresql",
  "database_version": "",
  "source_format": "pgsql",
  "schemas": [
    {
      "name": "public",
      "description": "",
      "tables": [
        {
          "name": "users",
          "schema": "public",
          "description": "",
          "columns": {
            "id": {
              "name": "id",
              "table": "users",
              "schema": "public",
              "type": "bigint",
              "length": 0,
              "precision": 0,
              "scale": 0,
              "not_null": true,
              "is_primary_key": true,
              "auto_increment": true,
              "default": "",
              "sequence": 1
            },
            "username": {
              "name": "username",
              "table": "users",
              "schema": "public",
              "type": "varchar",
              "length": 50,
              "not_null": true,
              "is_primary_key": false,
              "auto_increment": false,
              "sequence": 2
            },
            "email": {
              "name": "email",
              "table": "users",
              "schema": "public",
              "type": "varchar",
              "length": 100,
              "not_null": true,
              "sequence": 3
            }
          },
          "constraints": {
            "pk_users": {
              "name": "pk_users",
              "type": "PRIMARY KEY",
              "table": "users",
              "schema": "public",
              "columns": ["id"]
            },
            "uq_users_username": {
              "name": "uq_users_username",
              "type": "UNIQUE",
              "table": "users",
              "schema": "public",
              "columns": ["username"]
            }
          },
          "indexes": {
            "idx_users_email": {
              "name": "idx_users_email",
              "table": "users",
              "schema": "public",
              "columns": ["email"],
              "unique": false,
              "type": "btree"
            }
          },
          "relationships": {}
        },
        {
          "name": "posts",
          "schema": "public",
          "columns": {
            "id": {
              "name": "id",
              "type": "bigint",
              "not_null": true,
              "is_primary_key": true,
              "sequence": 1
            },
            "user_id": {
              "name": "user_id",
              "type": "bigint",
              "not_null": true,
              "sequence": 2
            },
            "title": {
              "name": "title",
              "type": "varchar",
              "length": 200,
              "not_null": true,
              "sequence": 3
            },
            "content": {
              "name": "content",
              "type": "text",
              "not_null": false,
              "sequence": 4
            }
          },
          "constraints": {
            "fk_posts_user_id": {
              "name": "fk_posts_user_id",
              "type": "FOREIGN KEY",
              "table": "posts",
              "schema": "public",
              "columns": ["user_id"],
              "referenced_table": "users",
              "referenced_schema": "public",
              "referenced_columns": ["id"],
              "on_delete": "CASCADE",
              "on_update": "NO ACTION"
            }
          },
          "indexes": {
            "idx_posts_user_id": {
              "name": "idx_posts_user_id",
              "columns": ["user_id"],
              "unique": false,
              "type": "btree"
            }
          }
        }
      ],
      "views": [],
      "sequences": []
    }
  ]
}

Schema Structure

The JSON format includes:

Database Level
  • name - Database name
  • description - Database description
  • database_type - Database system type
  • database_version - Version information
  • source_format - Original source format
  • schemas - Array of schema objects
Schema Level
  • name - Schema name
  • description - Schema description
  • tables - Array of table objects
  • views - Array of view objects
  • sequences - Array of sequence objects
Table Level
  • name - Table name
  • schema - Schema name
  • description - Table description
  • columns - Map of column objects
  • constraints - Map of constraint objects
  • indexes - Map of index objects
  • relationships - Map of relationship objects
Column Level
  • name - Column name
  • type - Data type
  • length - Type length
  • precision, scale - Numeric precision
  • not_null - NOT NULL flag
  • is_primary_key - Primary key flag
  • auto_increment - Auto-increment flag
  • default - Default value
  • sequence - Column order
Constraint Level
  • name - Constraint name
  • type - Constraint type (PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK)
  • columns - Constrained columns
  • referenced_table, referenced_schema - FK references
  • referenced_columns - Referenced columns
  • on_delete, on_update - FK actions
Index Level
  • name - Index name
  • columns - Indexed columns
  • unique - Unique flag
  • type - Index type

Use Cases

  • Version Control - Track schema changes in git
  • Documentation - Human-readable schema documentation
  • Interchange - Standard format for tool integration
  • Backup - Schema backup without database access
  • Testing - Test data for schema validation
  • API - Schema information for APIs

Notes

  • Output is pretty-printed with 2-space indentation
  • Preserves all schema metadata
  • Can be round-tripped (read and write) without loss
  • Schema-agnostic format
  • Ideal for automation and tooling

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Writer

type Writer struct {
	// contains filtered or unexported fields
}

Writer implements the writers.Writer interface for JSON format

func NewWriter

func NewWriter(options *writers.WriterOptions) *Writer

NewWriter creates a new JSON writer with the given options

func (*Writer) WriteDatabase

func (w *Writer) WriteDatabase(db *models.Database) error

WriteDatabase writes a complete database as JSON

func (*Writer) WriteSchema

func (w *Writer) WriteSchema(schema *models.Schema) error

WriteSchema writes a schema as JSON

func (*Writer) WriteTable

func (w *Writer) WriteTable(table *models.Table) error

WriteTable writes a single table as JSON

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL