DT Dev Tools

Converter JSON para C++ — Gerador de structs

Converta JSON em structs ou classes C++ online com from_json e to_json do nlohmann/json, campos std::optional e namespaces. Grátis, instantâneo e privado.

🔒 Executa completamente no seu navegador — nada é enviado

Publicidade

Gere tipos C++ a partir de JSON

O C++ não tem reflexão embutida, então mapear JSON para os seus próprios tipos normalmente significa escrever uma struct e depois um par de funções de serialização para cada objeto do payload. Este conversor de JSON para C++ gera ambas a partir de um exemplo. Cada objeto JSON vira uma struct (ou uma classe com getters e setters), as chaves viram membros em snake_case, objetos aninhados viram tipos próprios, arrays viram std::vector<T>, inteiros viram int64_t, números fracionários viram double e campos ausentes ou nulos em parte do exemplo viram std::optional<T>. Tudo é envolvido no namespace que você escolher e emitido como um único header protegido por #pragma once.

A inferência de tipos é feita pelo quicktype, que mescla todos os elementos de cada array antes de escolher um tipo. Um campo que aparece apenas em alguns itens ainda é capturado como opcional, de modo que analisar a resposta completa não gera erro por causa de uma chave ausente.

Integração com nlohmann/json

O header gerado foi projetado para o nlohmann/json, a biblioteca JSON mais popular do C++ moderno. Para cada tipo, ele define sobrecargas de from_json e to_json que mapeiam os membros de volta para as chaves JSON originais, além de pequenos auxiliares para valores opcionais. Com o json.hpp disponível, ler um documento é uma única chamada a nlohmann::json::parse(text).get<Root>(), e escrevê-lo de volta é nlohmann::json j = value;. Marque Types only se precisar apenas das declarações — por exemplo, para usar com outro serializador — e Use Boost se a sua toolchain não puder usar C++17.

Dicas para código de produção

Cole um exemplo completo, com vários itens nos arrays e os campos opcionais preenchidos, para que os tipos fiquem precisos. Arrays vazios e nulos recorrem a nlohmann::json, que normalmente você vai querer substituir. Renomeie o tipo raiz para combinar com o seu domínio, defina um namespace adequado ao seu projeto e execute o clang-format no resultado. Revise a largura dos inteiros, considere enum class para strings com um conjunto fixo de valores e lembre-se de que strings de data e hora continuam sendo std::string, para que você possa analisá-las com a biblioteca de sua preferência. Todo o processamento acontece localmente, então os payloads internos ficam na sua máquina.

Como usar

  1. Cole o JSONCole um documento JSON ou clique em Load sample.
  2. ConfigureDefina o nome do tipo raiz, o namespace, o estilo struct ou classe e o suporte a opcionais.
  3. Adicione o headerCopie o código ou baixe um arquivo .hpp e inclua-o junto com o json.hpp.

Perguntas frequentes

Qual biblioteca JSON o código gerado usa?
Ele usa a nlohmann/json. O header inclui sobrecargas de from_json e to_json, então nlohmann::json::parse(text).get<Root>() funciona de imediato.
Qual padrão C++ é necessário?
C++17 por padrão, porque os campos opcionais usam std::optional. Marque Use Boost para usar boost::optional no lugar, caso esteja preso a um padrão mais antigo.
Posso obter classes com getters e setters?
Sim. Mude Types para classes com getters/setters para ter membros encapsulados, ou mantenha structs simples para contêineres de dados.
Meu JSON é enviado para algum lugar?
Não. O header é gerado inteiramente no seu navegador; nada é enviado a um servidor.
Publicidade