Processamento JSON em C++ com a biblioteca nlohmann/json
No desenvolvimento moderno em C++, o trabalho com JSON (JavaScript Object Notation) tornou-se uma parte essencial na criação de serviços web, arquivos de configuração e troca de dados entre sistemas. Uma das bibliotecas mais populares e convenientes para esta tarefa é a nlohmann/json (ou simplesmente JSON for Modern C++). Ela oferece uma API intuitiva, sintaxe minimalista e alto desempenho. Neste artigo, vamos detalhar como usar esta biblioteca para parsing, criação, modificação e serialização de dados JSON em C++.
Instalação e inclusão
A biblioteca nlohmann/json é header-only (consiste apenas em arquivos de cabeçalho). Para instalá-la, basta baixar o arquivo json.hpp do repositório oficial e incluí-lo no projeto:
#include <nlohmann/json.hpp>using json = nlohmann::json;Se você usa CMake, pode incluir a biblioteca através do FetchContent ou vcpkg. Exemplo para CMake:
FetchContent_Declare(json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.2)FetchContent_MakeAvailable(json)
target_link_libraries(your_project PRIVATE nlohmann_json::nlohmann_json)Principais funcionalidades da biblioteca
- Parsing de JSON a partir de string ou arquivo – conversão de texto em dados estruturados.
- Criação de objetos JSON – formação dinâmica de estruturas usando operadores
[]e métodos. - Acesso a dados – leitura de valores por chaves e índices com verificação de tipos.
- Serialização – conversão do objeto JSON de volta para string com formatação.
- Trabalho com arrays e objetos aninhados – suporte a estruturas hierárquicas complexas.
- Tratamento de erros – exceções para dados ou tipos inválidos.
Exemplo 1: Parsing e leitura de dados
Vamos analisar um exemplo simples: temos uma string com JSON contendo informações sobre um usuário. Fazemos o parsing e extraímos os valores:
#include <iostream>#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() { std::string json_str = R"( { "name": "Иван", "age": 30, "is_student": false, "hobbies": ["чтение", "программирование", "спорт"] } )";
// Parsing da string para objeto json json user = json::parse(json_str);
// Acesso aos dados com verificação de tipo std::string name = user["name"]; int age = user["age"]; bool is_student = user["is_student"];
std::cout << "Nome: " << name << std::endl; std::cout << "Idade: " << age << std::endl; std::cout << "Estudante: " << (is_student ? "sim" : "não") << std::endl;
// Trabalho com array auto& hobbies = user["hobbies"]; std::cout << "Hobbies: "; for (const auto& hobby : hobbies) { std::cout << hobby << " "; } std::cout << std::endl;
return 0;}Exemplo 2: Criação e serialização de JSON
Frequentemente é necessário formar uma estrutura JSON programaticamente. O código a seguir cria um objeto com dados de um livro e o exibe de forma formatada:
#include <iostream>#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() { // Criamos um objeto vazio json book;
// Preenchemos os dados book["title"] = "Guerra e Paz"; book["author"] = "Liev Tolstói"; book["year"] = 1869; book["genres"] = {"romance", "literatura histórica"};
// Objeto aninhado book["publisher"]["name"] = "Eksmo"; Também na biblioteca
Monitoramento de aplicações Kotlin: visão geral de ferramentas e bibliotecas
Autorização e Autenticação em Swift (iOS/macOS): Guia Completo
Monitoramento de aplicações Rust: Visão geral de ferramentas e bibliotecas
Trabalhando com Kafka em TypeScript: biblioteca KafkaJS para Node.js
GORM para Go: guia completo com exemplos