Trabalho com JSON em C++: parsing e serialização na prática

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com JSON em C++: parsing e serialização na prática



JSON (JavaScript Object Notation) é um dos formatos de troca de dados mais populares em aplicações modernas. Apesar de C++ não ter suporte nativo a JSON, existem várias bibliotecas que facilitam o trabalho com este formato. Neste artigo, abordaremos os aspectos práticos de parsing e serialização de JSON em C++ usando a biblioteca nlohmann/json — uma das mais populares e fáceis de usar.



Por que escolher nlohmann/json?



A biblioteca nlohmann/json (frequentemente chamada de JSON for Modern C++) ganhou popularidade devido à sua API intuitiva, que lembra o trabalho com contêineres STL. Ela é header-only (não requer compilação), suporta C++11 e superior, além de oferecer alta performance e segurança de tipos.



A instalação da biblioteca é simples: basta baixar o arquivo de cabeçalho json.hpp ou usar um gerenciador de pacotes como vcpkg, Conan ou CMake FetchContent.



#include <nlohmann/json.hpp>using json = nlohmann::json;


Fundamentos do parsing de JSON em C++



Parsing de JSON é o processo de converter uma string em dados estruturados. A biblioteca nlohmann/json oferece várias formas de fazer parsing.



Parsing a partir de uma string



A forma mais comum é usar o método estático json::parse():



#include <iostream>#include <string>#include <nlohmann/json.hpp>

int main() { std::string json_string = R"({ "name": "Ivan", "age": 30, "is_student": false, "skills": ["C++", "Python", "JavaScript"], "address": { "city": "Moscou", "zip": "101000" } })";

try { json data = json::parse(json_string); // Acesso aos dados std::cout << "Nome: " << data["name"] << std::endl; std::cout << "Idade: " << data["age"] << std::endl; std::cout << "Estudante: " << (data["is_student"] ? "sim" : "não") << std::endl; // Trabalhando com arrays for (auto& skill : data["skills"]) { std::cout << "Habilidade: " << skill << std::endl; } // Trabalhando com objetos aninhados std::cout << "Cidade: " << data["address"]["city"] << std::endl; } catch (json::parse_error& e) { std::cerr << "Erro de parsing: " << e.what() << std::endl; } return 0;}


Parsing a partir de um arquivo



Para trabalhar com arquivos, use os fluxos de entrada e saída do C++:



#include <fstream>#include <nlohmann/json.hpp>

int main() { std::ifstream file("data.json"); if (!file.is_open()) { std::cerr << "Não foi possível abrir o arquivo" << std::endl; return 1; } try { json data = json::parse(file); std::cout << "Dados carregados: " << data.dump(2) << std::endl; } catch (json::parse_error& e) { std::cerr << "Erro: " << e.what() << std::endl; } return 0;}


Serialização de JSON em C++



Serialização é o processo inverso: converter dados de C++ em uma string JSON. A biblioteca oferece o método dump() com opções de formatação.



Criando um objeto JSON



Você pode criar objetos JSON diretamente, como arrays associativos comuns:



#include <nlohmann/json.hpp>#include <iostream>

int main() { json person; person["name"] = "Maria"; person["age"] = 25; person["is_employed"] = true; person["languages"] = {"Português", "Inglês", "Alemão"};

Blogs

Book Recommendations