Cole o C à esquerda e clique em "Convert" — a gente transforma em JSONCole código C

O que essa ferramenta faz

Se você já precisou de um payload JSON espelhando um struct de C — pra testar um serviço compilado com gcc, configurar um dispositivo embarcado, ou um trecho de doc — já sabe como costuma ser: puxar cJSON, escrever o glue code por campo, recompilar, debugar. Cola o C aqui e pega JSON válido sem mexer em Makefile. Dá conta de um designated initializer solto, um header com vários structs, ou algo com tipos aninhados e arrays — mesmo resultado: um documento JSON limpo com todos os campos preservados.

O conversor entende como os valores de C de fato se serializam. int, long, size_t, float e double viram números JSON. Arrays de char e literais de string viram strings JSON. bool de stdbool.h vira true/false. Arrays fixos (int items[3]) viram arrays JSON com o tamanho certo. structs aninhados — um Address dentro de um Order, por exemplo — se expandem em objetos JSON aninhados. O comportamento segue a referência da linguagem C.

Designated initializers do C99 (.field = value) têm suporte completo — é o jeito normal que se escreve literais de struct em código real hoje. Aliases typedef são resolvidos, e valores enum saem como valor numérico ou nome do símbolo dependendo do contexto. Tipos union serializam o membro ativo. Ponteiros apontando pra NULL viram null JSON; caso contrário, o valor apontado é expandido. Cola vários structs de uma vez e cada um vira uma chave top-level na saída.

Como usar

Três passos. Funciona igual pra um initializer de duas linhas e pra um header inteiro com vinte typedefs.

1

Cole seu C (ou carregue o exemplo)

Joga seu C direto no editor da esquerda. Uma definição de struct, um typedef, um designated initializer, vários structs, ou arrays aninhados — tudo entra. Clique em Load Sample pra ver primeiro um exemplo realista.

Não precisa remover diretivas #include nem atributos específicos do compilador. Deixa a sintaxe ISO C intacta — o parser aguenta. C89 e C moderno (C11/C17/C23) funcionam igual.

2

Aperta Convert

Clica no botão verde Convert. A ferramenta lê o C, percorre cada struct, expande os initializers, e cospe o JSON numa passada só. Um indicador de loading aparece enquanto roda.

3

Copie o JSON

O painel da direita se enche com JSON indentado. Copia pro seu cliente HTTP, config de firmware embarcado, fixture de teste, ou README. É o ciclo todo — sem passo de build.

Quando isso realmente salva

Config embarcada e firmware

Você tem um struct de config de dispositivo em C e precisa de uma versão JSON pra um endpoint REST ou uma ferramenta de provisionamento. Cola o struct, pega o JSON, manda.

Payloads de requisição API

Um serviço em C envelopando uma API de terceiros. Cola o struct da request, pega JSON que dá pra testar com curl antes de fiar cJSON em produção.

Fixtures de testes unitários

Transforma os designated initializers dos seus testes unitários em arquivos JSON seed pra testes de integração ou comparações golden-file.

Docs que batem com o código

Gera exemplos JSON pra README ou doc de protocolo direto dos seus structs reais, assim a documentação fica em sync com o header.

Perguntas comuns

Preciso ter cJSON ou Jansson instalados?

Não. Essa ferramenta roda no servidor e não compila seu código — você recebe JSON sem puxar uma lib de serialização. Se você quer uma opção em runtime, cJSON é a escolha padrão; Jansson também é boa.

Entende designated initializers e typedefs?

Sim. Designated initializers do C99 (.field = value) têm suporte completo, e aliases typedef são resolvidos de volta pro struct subjacente. Designated initializers aninhados se expandem do mesmo jeito que o compilador os colocaria.

E arrays, ponteiros e NULL?

Arrays de tamanho fixo viram arrays JSON com a quantidade certa de elementos. Membros ponteiro que estão em NULL viram null JSON; caso contrário, o valor apontado é expandido. Arrays de structs funcionam igual — cada elemento é um objeto JSON aninhado.

Como enums e unions são tratados?

Valores enum saem como nome do símbolo ou valor numérico dependendo do contexto. Tipos union serializam o membro ativo no momento. Bitfields (unsigned flags : 4) viram números.

Meu código é guardado?

Seu código é enviado pro backend pra conversão e não é persistido — a gente não loga o payload. Se o código for realmente sensível (firmware embarcado com segredos, detalhes de protocolo interno), dá uma revisada antes de colar.

E se o C tiver macros ou extensões do compilador?

Macros que expandem pra um valor funcionam; macros function-like que fazem lógica de verdade são tratadas como opacas e emitidas como null em vez de travar. Atributos de GCC e MSVC (__attribute__, __declspec) são tolerados e ignorados.

Outras ferramentas que podem te servir

C para JSON é só uma peça do quebra-cabeça. Essas combinam bem: