Executando verificação de segurança...
33

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, overwrite ou error)

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..10
  • 10..1
  • 0..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

  • -i input
  • -o output
  • --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

FormatoSuporte a LógicaRangesTemplatesModularizaçãoFoco
JSONNOPNOPNOPNOPDados
YAMLNOPNOPNOPNOPConfig
CSVNOPNOP✔️ (parcial)NOPTabelas
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)

  1. Instale o CLI (Só testei no meu windows por enquanto - Instale a V 0.0.4)
    https://github.com/CarlosEduJs/jsson/releases

  2. Rode no terminal:
    jsson -i config.jsson > config.json

  3. 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

É ISSO, vc já viu tudo sobre. Obrigado por ler até aqui.

Carregando publicação patrocinada...
4

Parabéns pela iniciativa! Mas complementando aqui com comparações mais justas:

O seu projeto cabe numa categoria que é linguagem de template (template language). Que tem como finalidade escrever linguagens de marcação (markup language): CSV, JSON, XML...

Linguagens de template bem famosas são Jinja2 e Django Templates em python e em javascript: handlebars. Essa inclusive que faz parte do core de frameworks JS (Ember, Node)

Tem jsonnet da Google que é um pouco parecido à sua também com a mesma finalidade.

Vale a pena testar essas e comparar e incrementar funcionalidades diferentes das outras no seu projeto. Uma ideia interessante.

1
2

Real, mano! Eu tenho que concordar que a sua linguagem daria uma ótima opção como linguagem de template para possíveis novas bibliotecas/frameworks de UI, por exemplo. Me lembra um pouco aquela linguagem do Kivy e o Slint também.

2

Por favor, não me interprete mal, mas fiquei curioso se o projeto foi programado por você ou por LLMs?

Me chamou atenção que o histórico de commits está confuso, e este parece ser seu primeiro projeto público com Go no GitHub. De qualquer forma, a ideia é muito bacana.

1

Entendo. Não foi programado por LLM o codigo interno da linguagem. E sim é o meu primeiro projeto em Go, estava a um tempo aprendendo essa linguagem.

De qualquer forma, vlw aí pelo feedback.

0
2
0
2
2
1

Sensacional, eh um projeto de fácil adoção, maneira nova de diminuir o payload, e ainda pode ser progressivo, evoluindo para funções de laço e condições diferentes. Pode ser de difícil interpretação como referência, mas proporciona uma grande mudança. Obrigado por compartilhar o projeto.

0
1

Realmente muito legal a proposta do seu projeto, obrigado por compartilhar!

Minha sugestão é você transformar a proposta do projeto para ser o mesmo que o typescript foi para o javascript, um facilitador, para reduzir código.

Inclusive, até recomendo voce utilizar mais da estrutura do typescript para que tenham mais adeptos devido a baixa curva de aprendizagem.

Outra sugestão é você não focar os exemplos em dados de teste, para quem esta lendo a primeira vez, na correria do dia a dia, pensa: "é só uma ferramenta para criar demos, não vou usar isso", e seu projeto pode ser muito mais.

Existem diversas situações que precisamos usar bases de dados imensas em json (passei por isso há algumas semanas, com dados de coordenadas geograficas com MILHÕES de registros para um sistema legado).

3

Obrigado pelo feedback, gmasson!
Cara, muito obrigado pelo seu comentário. Suas considerações foram bem legais mesmo.

  1. A analogia "JSSON está para JSON como TypeScript está para JavaScript" é simplesmente perfeita. É exatamente essa a visão.

  2. Você está certíssimo sobre a curva de aprendizagem. A ideia sempre foi ser intuitivo, e sua sugestão de se apoiar em padrões conhecidos do ecossistema TS/JS reforça totalmente esse caminho.

  3. Seu terceiro ponto foi um genial tmb. Você tem toda a razão, focar só em dados de teste limita a percepção do projeto. Seu exemplo de dados geográficos com milhões de registros é exatamente o tipo de "dor" que o JSSON nasceu para resolver.

Já estou pensando em novos exemplos graças a sua resposta.Valeu demais pela força e pela visão!

-1
-2