JSSON (JavaScript Simplified Object Notation)
Hoje eu tô lançando oficialmente o JSSON (pronuncia djéisson anota aí)
Post novo:[https://www.tabnews.com.br/carlosedujs/jsson-javascript-simplied-object-notation-v0-0-3]
Antes de tudo: isso aqui NÃO quer substituir o JSON.
A ideia é simples: te livrar do inferno de escrever JSON na unha.
Eu sei, eu sei… já dá pra até ouvir alguém bufando:
“Ai lá vem mais um TOON da vida…”
Relaxa. Prometo que não é aquele tipo de formato que te dá vontade de desistir da programação.
🤔 Por quê o JSSON existe?
Pensa naquelas horas em que você precisa montar essas coisas aqui na mão (chato e a chance de erro em):
- mocks gigantes
- seeds pro banco
- estruturas repetitivas
- configs intermináveis
- arrays quilométricos
…e aí fica brigando com vírgula, aspas, chaves, colchetes e indentação.
Pois é.
O JSSON nasceu pra acabar com esse sofrimento infernal.
Exemplo básico do basico
user {
name = João
age = 20
admin = true
roles = [ "admin", "editor" ]
config {
theme = dark
}
}
Sem aspas em campos simples. Sem vírgulas. Sem drama.
Template simples (calma, eu sei que parece CSV…)
users [
template { name, age, job, height }
João, 19, Student, 1.75
Maria, 25, Teacher, 1.65
Pedro, 30, Doctor, 1.80
Ana, 22, Nurse, 1.68
]
Sim, lembra CSV. E com isso vc não vai criar uma estrutura grande, mas tranquiliza o seu coração e veja isso:
Templates + lógica.
E é aqui que o JSSON vai te mudar de ideia.
Agora sim: lógica embutida
Esse exemplo transforma automaticamente cada item:
routes [
template { path, method }
map (item) = {
path = "/api/" + item.path
method = item.method
}
users, GET
posts, POST
]
Saída:
{
"routes": [
{ "path": "/api/users", "method": "GET" },
{ "path": "/api/posts", "method": "POST" }
]
}
Criando estruturas gigantes com ranges
servers [
template { id, port }
map (s) = {
id = s.id
ip = "192.168.1." + s.id
port = s.port
}
100..120,
3000..3020
]
Sim. Isso gera 21 servidores com IP e porta combinados.
Sim. Sem escrever nada na mão.
Sim. Tocando o hino da vitória.
Dando “inteligência” pros dados
users [
template { name, age, department, yearsOfService }
map (u) = {
name = u.name
age = u.age
department = u.department
yearsOfService = u.yearsOfService
canVote = u.age >= 18
isExecutive = u.yearsOfService >= 10
accessLevel = u.yearsOfService >= 10 ? "senior"
: u.yearsOfService >= 5 ? "mid"
: "junior"
salary = u.yearsOfService >= 10 ? 150000
: u.yearsOfService >= 5 ? 100000
: 60000
benefits = u.yearsOfService >= 5 ? ["health", "dental", "401k"] : ["health"]
}
"João Silva", 35, Engineering, 12
"Maria Santos", 28, Sales, 6
"Pedro Costa", 22, Marketing, 2
]
Você escreve 3 linhas.
O JSSON monta um objeto completo com lógica embutida.
Gerando dezenas de usuários em minutos
users [
template { id, department }
map (u) = {
id = u.id
username = "user_" + u.id
email = "user_" + u.id + "@company.com"
dept = u.department
role = "employee"
}
// Engineering
100..104, Engineering
// Sales
200..204, Sales
]
Pronto. Usuários gerados automaticamente, todos padronizados bonitinho.
Gerando times completos (com lógica + ranges)
O clássico exemplo:
employees [
template { id, dept, level }
map (e) = {
id = e.id
name = "Employee " + e.id
email = "emp" + e.id + "@corp.com"
department = e.dept
level = e.level
salary = e.level == "senior" ? 120000
: e.level == "mid" ? 80000
: 50000
}
// Engineering
1000..1004, Engineering, junior
1005..1009, Engineering, mid
1010..1012, Engineering, senior
// Sales
2000..2009, Sales, junior
2010..2014, Sales, mid
// HR
3000..3002, HR, mid
3003..3004, HR, senior
]
Esse tipo de coisa é absurdamente útil pra:
- seeds
- testes unitários
- prototipação
- APIs fake
- demos
- scripts internos
Agora o isso aqui Modularização com include
Sim, o JSSON inclui outros arquivos .jsson e faz merge automático.
include "database.jsson"
Como funciona:
- resolve o caminho
- detecta ciclos (A chama B, B chama A → erro)
- usa cache
- transpila o incluído
- faz merge no root (com modo
keep,overwriteouerror)
Exemplo:
database.jsson
db { host = localhost }
main.jsson
app = "MyApp"
include "database.jsson"
JSON final:
{
"app": "MyApp",
"db": { "host": "localhost" }
}
Simples. Direto. Resolvido.
Features completas do JSSON 😏
Sintaxe básica
- Sem aspas para valores simples
- Sem vírgulas
- Comentários
// - Strings, numbers, booleans, arrays, objetos
Arrays com Template
users [
template { name, age }
João, 25
Maria, 30
]
Map (transformação)
map (user) = {
name = user.name
active = true
}
Ranges poderosos
1..1010..10..10 step 2"192.168.1.100".."192.168.1.150"
Expressões
+ - * / %- Comparações
- Ternário
- Concatenação
- Member access
- Precedência com
()
Modularização com Include
- Merge modes:
keep,overwrite,error - Ciclo detectado
- Cache de includes
Extras
- Zero-padding em ranges (
emp001..emp010) - Arrays mistos
- Objetos aninhados infinitos
- Variáveis dentro de
map
CLI
-iinput-ooutput--merge-mode
E aí?
Se você escreve JSON na mão,
se sofre com seeds, mocks e configs,
ou se só quer parar de lutar com vírgula…
Comparando rapidinho
| Formato | Suporte a Lógica | Ranges | Templates | Modularização | Foco |
|---|---|---|---|---|---|
| JSON | NOP | NOP | NOP | NOP | Dados |
| YAML | NOP | NOP | NOP | NOP | Config |
| CSV | NOP | NOP | ✔️ (parcial) | NOP | Tabelas |
| JSSON | ✔️ | ✔️ | ✔️ | ✔️ | Geração de dados |
Se vc quiser, dê uma olhada na documentação: Documentação do JSSON
Se vc quiser, testar rapido, lancei o playground: Playground
Como usar agora (super rápido)
-
Instale o CLI (Só testei no meu windows por enquanto - Instale a V 0.0.4)
https://github.com/CarlosEduJs/jsson/releases -
Rode no terminal:
jsson -i config.jsson > config.json -
Pronto: JSON gerado na hora.
Documentação completa: https://jsson-docs.vercel.app
- Instale tmb a extensão, somente o Syntax Highlighting mesmo, pra editores de código do vs code: JSSON Syntax Highlighting