Jsson Docs
Guides

Templates Guide

Generate structured arrays from tabular data.

Overview

Templates let you define a structure once and write data like a spreadsheet:

users [
  template { name, age, role }
  "Alice", 25, "admin"
  "Bob", 30, "user"
  "Charlie", 28, "user"
]

Output:

{
  "users": [
    { "name": "Alice", "age": 25, "role": "admin" },
    { "name": "Bob", "age": 30, "role": "user" },
    { "name": "Charlie", "age": 28, "role": "user" }
  ]
}

Syntax

arrayName [
  template { field1, field2, field3 }
  value1, value2, value3
  value4, value5, value6
]

Map Transformation

Add computed fields with map:

users [
  template { name, age }
  
  map (u) = {
    name = u.name
    age = u.age
    adult = u.age >= 18
    email = u.name + "@example.com"
  }
  
  "Alice", 25
  "Bob", 17
]

String Concatenation

employees [
  template { first, last }
  
  map (e) = {
    fullName = e.first + " " + e.last
    email = e.first + "@company.com"
  }
  
  "João", "Silva"
  "Maria", "Santos"
]

Ranges in Templates

Generate many records with ranges:

users [
  template { id, name }
  
  map (u) = {
    id = u.id
    name = "User " + u.id
    email = "user" + u.id + "@example.com"
  }
  
  0..99, "User"   // Generates 100 users
]

Multiple ranges for segments:

employees [
  template { id, dept }
  100..199, "Engineering"
  200..299, "Sales"
  300..399, "Support"
]

Examples

Database Seed

users [
  template { email, name, role, active }
  "admin@app.com", "Admin", "admin", true
  "john@app.com", "John", "user", true
  "jane@app.com", "Jane", "user", false
]

API Routes

routes [
  template { path, method, auth }
  "/users", "GET", true
  "/users/:id", "GET", true
  "/posts", "GET", false
]

Test Cases

loginTests [
  template { email, password, expected }
  "valid@test.com", "correct123", true
  "invalid@test.com", "wrong", false
  "", "password", false
]

With Defaults

products [
  template { name, price }
  
  map (p) = {
    name = p.name
    price = p.price
    currency = "USD"
    inStock = true
  }
  
  "Laptop", 999.99
  "Mouse", 29.99
]

Best Practices

Do:

  • Keep templates simple, use map for computed fields
  • Quote values with spaces: "Software Engineer"
  • Use ranges for large datasets

Don't:

  • Put too many fields in template definition
  • Use templates for single objects
  • Forget matching value counts per row

Troubleshooting

Wrong number of values:

users [
  template { name, age, email }
  "João", 25                    // ❌ Missing email
  "João", 25, "joao@test.com"   // ✅ Correct
]

Missing quotes:

users [
  template { name, title }
  "João", Software Engineer     // ❌ Space without quotes
  "João", "Software Engineer"   // ✅ Quoted
]

Next Steps

On this page