Trabajo con JSON en C++: análisis y serialización de datos

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



JSON (JavaScript Object Notation) sigue siendo uno de los formatos más populares para el intercambio de datos en aplicaciones web, archivos de configuración y API. A pesar de que C++ no tiene soporte integrado para JSON, existen varias bibliotecas potentes que hacen que trabajar con este formato sea simple y eficiente. En este artículo, veremos las dos bibliotecas más populares: nlohmann/json (recomendada para la mayoría de proyectos) y RapidJSON (para tareas donde el rendimiento es crítico). Aprenderá cómo analizar JSON, serializar objetos de vuelta a una cadena y manejar errores.



¿Por qué es necesario JSON en C++?



C++ es un lenguaje de programación de sistemas, pero las aplicaciones modernas requieren cada vez más interacción con servicios web, almacenamiento de configuraciones o intercambio de datos entre microservicios. JSON proporciona un formato conveniente y legible para estas tareas. El uso de bibliotecas para trabajar con JSON en C++ permite:

  • Cargar y procesar archivos de configuración (por ejemplo, para motores de juegos o servidores).
  • Interactuar con REST API (enviar y recibir datos).
  • Guardar y restaurar el estado de estructuras de datos complejas.
  • Integrarse con otros lenguajes y sistemas que utilizan JSON.


Biblioteca nlohmann/json: simplicidad y comodidad



La biblioteca nlohmann/json (a menudo llamada "JSON for Modern C++") es quizás la más popular debido a su API intuitiva, que recuerda al trabajo con Python o JavaScript. Soporta C++11 y superior.



Instalación

La forma más sencilla es copiar el único archivo de cabecera json.hpp en su proyecto. Puede descargarlo desde el repositorio oficial o instalarlo a través de un gestor de paquetes (vcpkg, Conan).



Análisis de JSON desde una cadena

Veamos un ejemplo básico de análisis de una cadena JSON y acceso a los datos:

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

int main() { // Cadena JSON para analizar std::string json_string = R"({ "name": "C++", "version": 17, "features": ["RAII", "Templates", "Smart Pointers"], "is_compiled": true })";

// Análisis de la cadena en un objeto json json data = json::parse(json_string);

// Acceso a los valores std::cout << "Lenguaje: " << data["name"] << std::endl; std::cout << "Versión: " << data["version"] << std::endl; std::cout << "Compilable: " << data["is_compiled"] << std::endl;

// Acceso al array for (auto& feature : data["features"]) { std::cout << " - " << feature << std::endl; } return 0;}

Salida:

Lenguaje: "C++"Versión: 17Compilable: true - "RAII" - "Templates" - "Smart Pointers"


Serialización (creación de JSON)

Crear un objeto JSON y convertirlo en una cadena es igual de simple:

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

int main() { // Creamos un objeto JSON json person; person["name"] = "Alice"; person["age"] = 30; person["is_student"] = false; person["hobbies"] = {"reading", "coding", "chess"};

// Añadimos un objeto anidado person["address"]["city"] = "Moscow"; person["address"]["zip"] = "101000";

// Serialización a cadena con sangría std::string serialized = person.dump(4); // 4 espacios para sangría std::cout << serialized << std::endl;

return 0;}

El método dump(4) devuelve una cadena bellamente formateada. Para una salida compacta, use

Blogs

Book Recommendations