Trabalhando com JSON em C++: parsing e serialização de dados

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

Introdução ao trabalho com JSON em C++

JSON (JavaScript Object Notation) é um formato leve de troca de dados, amplamente utilizado em desenvolvimento web, arquivos de configuração e APIs. Apesar de C++ não ter suporte nativo a JSON, existem diversas bibliotecas confiáveis que simplificam o parsing (análise) e a serialização (conversão para string) dos dados. Neste artigo, veremos duas bibliotecas populares: nlohmann/json (recomendada para iniciantes e projetos modernos) e Boost.PropertyTree (para quem já utiliza Boost). Você aprenderá a ler, criar, modificar e exibir dados JSON em C++.



Biblioteca nlohmann/json: instalação e conceitos básicos

A biblioteca nlohmann/json (frequentemente chamada de "JSON for Modern C++") é uma das mais populares devido à sua simplicidade e API intuitiva. Ela suporta C++11 e superior, não requer dependências externas e é distribuída como um único arquivo de cabeçalho json.hpp.



Instalação

Baixe o arquivo json.hpp do repositório no GitHub e coloque-o na pasta do seu projeto. Em seguida, inclua-o no código:

#include <iostream>#include <fstream>#include "json.hpp" // Inclusão da biblioteca

using json = nlohmann::json;


Parsing de JSON a partir de string e arquivo

A biblioteca permite fazer parsing de JSON a partir de string, arquivo ou fluxo de entrada. Veja um exemplo de parsing a partir de string:

#include <iostream>#include "json.hpp"

using json = nlohmann::json;

int main() { // String JSON std::string jsonString = R"({ "name": "Alice", "age": 30, "isStudent": false, "hobbies": ["reading", "coding"] })"; // Parsing json data = json::parse(jsonString); // Acesso aos dados std::cout << "Name: " << data["name"] << std::endl; std::cout << "Age: " << data["age"] << std::endl; std::cout << "Is student: " << (data["isStudent"] ? "true" : "false") << std::endl; // Iteração sobre o array for (auto& hobby : data["hobbies"]) { std::cout << "Hobby: " << hobby << std::endl; } return 0;}

Para fazer parsing a partir de um arquivo, use json::parse(std::ifstream("data.json"));.



Serialização JSON

A criação de um objeto JSON e sua serialização em string é feita de forma natural:

#include <iostream>#include "json.hpp"

using json = nlohmann::json;

int main() { json person; person["name"] = "Bob"; person["age"] = 25; person["isStudent"] = true; person["hobbies"] = {"gaming", "swimming"}; // Objeto aninhado json address; address["city"] = "Moscow"; address["street"] = "Tverskaya"; person["address"] = address; // Serialização em string com indentação std::string serialized = person.dump(4); // 4 espaços para formatação std::cout << serialized << std::endl; // Salvando em arquivo std::ofstream file("output.json"); file << person.dump(2); file.close(); return 0;}

O método dump() converte o objeto em string. O parâmetro indica o número de espaços para indentação (0 — saída compacta).



Biblioteca Boost.PropertyTree: abordagem alternativa

Se o seu projeto já utiliza Boost, a biblioteca Boost.PropertyTree oferece uma maneira conveniente de trabalhar com JSON e outros formatos (XML, INI). Ela é menos especializada para JSON, mas se integra bem com o ecossistema Boost.



Parsing de JSON com Boost.PropertyTree

#include <iostream>#include <boost/property_tree/ptree.hpp>

Blogs

Book Recommendations