Trabajo con JSON en C++: análisis y serialización en la práctica

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con JSON en C++: análisis y serialización en la práctica



JSON (JavaScript Object Notation) es uno de los formatos de intercambio de datos más populares en las aplicaciones modernas. A pesar de que C++ no tiene soporte integrado para JSON, existen muchas bibliotecas que facilitan el trabajo con este formato. En este artículo, exploraremos los aspectos prácticos del análisis y la serialización de JSON en C++ utilizando la biblioteca nlohmann/json, una de las más populares y fáciles de usar.



¿Por qué elegir nlohmann/json?



La biblioteca nlohmann/json (a menudo llamada JSON for Modern C++) ha ganado popularidad gracias a su API intuitiva, similar al trabajo con contenedores STL. Es header-only (no requiere compilación), compatible con C++11 y superior, y ofrece alto rendimiento y seguridad de tipos.



La instalación de la biblioteca es sencilla: basta con descargar el archivo de cabecera json.hpp o usar un gestor de paquetes como vcpkg, Conan o CMake FetchContent.



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


Fundamentos del análisis de JSON en C++



El análisis de JSON es el proceso de convertir una cadena en datos estructurados. La biblioteca nlohmann/json proporciona varias formas de realizar el análisis.



Análisis desde una cadena



La forma más común es usar el método estático json::parse():



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

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

try { json data = json::parse(json_string); // Acceso a los datos std::cout << "Nombre: " << data["name"] << std::endl; std::cout << "Edad: " << data["age"] << std::endl; std::cout << "Estudiante: " << (data["is_student"] ? "sí" : "no") << std::endl; // Trabajo con arreglos for (auto& skill : data["skills"]) { std::cout << "Habilidad: " << skill << std::endl; } // Trabajo con objetos anidados std::cout << "Ciudad: " << data["address"]["city"] << std::endl; } catch (json::parse_error& e) { std::cerr << "Error de análisis: " << e.what() << std::endl; } return 0;}


Análisis desde un archivo



Para trabajar con archivos, use los flujos de entrada/salida de C++:



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

int main() { std::ifstream file("data.json"); if (!file.is_open()) { std::cerr << "No se pudo abrir el archivo" << std::endl; return 1; } try { json data = json::parse(file); std::cout << "Datos cargados: " << data.dump(2) << std::endl; } catch (json::parse_error& e) { std::cerr << "Error: " << e.what() << std::endl; } return 0;}


Serialización de JSON en C++



La serialización es el proceso inverso: convertir datos de C++ en una cadena JSON. La biblioteca ofrece el método dump() con capacidad de formato.



Creación de un objeto JSON



Puede crear objetos JSON directamente, como arreglos asociativos normales:



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

int main() { json person; person["name"] = "María"; person["age"] = 25; person["is_employed"] = true; person["languages"] = {"Ruso", "Inglés", "Alemán"};

Blogs

Book Recommendations