Introducción al trabajo con JSON en C++
JSON (JavaScript Object Notation) es un formato ligero de intercambio de datos ampliamente utilizado en desarrollo web, archivos de configuración y API. Aunque C++ no tiene soporte integrado para JSON, existen muchas bibliotecas que facilitan y simplifican el trabajo con este formato. En este artículo, veremos cómo analizar (procesar) y serializar (crear) datos JSON en C++ utilizando la popular biblioteca nlohmann/json. El material está dirigido a desarrolladores principiantes que ya conocen los fundamentos de C++.
1. Instalación y configuración de la biblioteca nlohmann/json
La biblioteca nlohmann/json es una de las más populares y fáciles de usar para trabajar con JSON en C++. Es compatible con C++11 y versiones posteriores, y funciona en todas las plataformas principales.
Métodos de instalación
- Descargar el archivo de cabecera: vaya al repositorio de GitHub y descargue el archivo
json.hpp. - Instalación mediante vcpkg:
vcpkg install nlohmann-json - Instalación mediante Conan:
conan install nlohmann_json/3.11.2@
Después de la instalación, simplemente incluya el archivo en su proyecto:
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { std::cout << "¡Biblioteca conectada!" << std::endl; return 0;}2. Análisis de JSON: lectura de datos desde una cadena y un archivo
El análisis (procesamiento) de JSON es el proceso de convertir una cadena en formato JSON en estructuras de datos de C++. La biblioteca nlohmann/json lo hace de manera muy sencilla.
Análisis desde una cadena
Veamos un ejemplo de procesamiento de un objeto JSON simple:
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { std::string json_str = R"({ "name": "Ana", "age": 25, "is_student": false, "hobbies": ["lectura", "natación", "programación"] })";
// Análisis de la cadena json data = json::parse(json_str);
// Acceso a los datos std::string name = data["name"]; int age = data["age"]; bool is_student = data["is_student"]; std::vector<std::string> hobbies = data["hobbies"];
std::cout << "Nombre: " << name << std::endl; std::cout << "Edad: " << age << std::endl; std::cout << "Estudiante: " << (is_student ? "sí" : "no") << std::endl; std::cout << "Pasatiempos: "; for (const auto& hobby : hobbies) { std::cout << hobby << " "; } std::cout << std::endl;
return 0;}Análisis desde un archivo
A menudo, los datos JSON se almacenan en archivos. Así es como se leen:
#include <iostream>#include <fstream>#include "json.hpp"using json = nlohmann::json;
int main() { std::ifstream file("data.json"); if (!file.is_open()) { std::cerr << "¡Error al abrir el archivo!" << std::endl; return 1; }
json data = json::parse(file); file.close();
// Salida de datos std::cout << "Datos del archivo: " << data.dump(4) << std::endl; return 0;}El método dump(4) convierte el JSON de vuelta a una cadena con sangría de 4 espacios para facilitar la lectura.
3. Serialización: creación de JSON a partir de datos de C++
La serialización es el proceso inverso: convertir datos de C++ en una cadena JSON. La biblioteca permite crear objetos JSON de forma intuitiva.
Creación de un objeto JSON simple
#include <iostream>#include "json.hpp"using json = nlohmann::json;
int main() { json person;
person["name"] = "Iván";