Procesamiento de JSON en C++ con la biblioteca nlohmann/json
En el desarrollo moderno con C++, trabajar con JSON (JavaScript Object Notation) se ha convertido en una parte esencial al crear servicios web, archivos de configuración e intercambiar datos entre sistemas. Una de las bibliotecas más populares y convenientes para esta tarea es nlohmann/json (o simplemente JSON for Modern C++). Ofrece una API intuitiva, sintaxis minimalista y alto rendimiento. En este artículo, analizaremos en detalle cómo usar esta biblioteca para analizar, crear, modificar y serializar datos JSON en C++.
Instalación y configuración
La biblioteca nlohmann/json es header-only (consiste solo en archivos de encabezado). Para instalarla, basta con descargar el archivo json.hpp desde el repositorio oficial e incluirlo en el proyecto:
#include <nlohmann/json.hpp>using json = nlohmann::json;Si usas CMake, puedes incluir la biblioteca mediante FetchContent o vcpkg. Ejemplo para CMake:
FetchContent_Declare(json GIT_REPOSITORY https://github.com/nlohmann/json.git GIT_TAG v3.11.2)FetchContent_MakeAvailable(json)
target_link_libraries(your_project PRIVATE nlohmann_json::nlohmann_json)Funcionalidades principales de la biblioteca
- Analizar JSON desde una cadena o archivo – convertir texto en datos estructurados.
- Crear objetos JSON – formar estructuras dinámicamente usando los operadores
[]y métodos. - Acceso a datos – leer valores por claves e índices con verificación de tipos.
- Serialización – convertir un objeto JSON de vuelta a una cadena con formato.
- Trabajar con arreglos y objetos anidados – soporte para estructuras jerárquicas complejas.
- Manejo de errores – excepciones ante datos o tipos incorrectos.
Ejemplo 1: Análisis y lectura de datos
Analicemos un ejemplo simple: tenemos una cadena con JSON que contiene información sobre un usuario. La analizamos y extraemos los valores:
#include <iostream>#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() { std::string json_str = R"( { "name": "Иван", "age": 30, "is_student": false, "hobbies": ["чтение", "программирование", "спорт"] } )";
// Analizar la cadena en un objeto json json user = json::parse(json_str);
// Acceso a datos con verificación de tipo std::string name = user["name"]; int age = user["age"]; bool is_student = user["is_student"];
std::cout << "Имя: " << name << std::endl; std::cout << "Возраст: " << age << std::endl; std::cout << "Студент: " << (is_student ? "да" : "нет") << std::endl;
// Trabajar con arreglos auto& hobbies = user["hobbies"]; std::cout << "Хобби: "; for (const auto& hobby : hobbies) { std::cout << hobby << " "; } std::cout << std::endl;
return 0;}Ejemplo 2: Creación y serialización de JSON
A menudo es necesario formar una estructura JSON mediante programación. El siguiente código crea un objeto con datos de un libro y lo muestra en formato legible:
#include <iostream>#include <nlohmann/json.hpp>
using json = nlohmann::json;
int main() { // Crear un objeto vacío json book;
// Rellenar datos book["title"] = "Война и мир"; book["author"] = "Лев Толстой"; book["year"] = 1869; book["genres"] = {"роман", "историческая литература"};
// Objeto anidado book["publisher"]["name"] = "Эксмо"; También en la biblioteca
Generación de Swagger/OpenAPI para Swift: herramientas y ejemplos de código
Limitación de Tasa en Node.js: Guía Completa para Proteger APIs y Gestionar la Carga
Aprendizaje automático en C# (.NET): revisión de bibliotecas y herramientas
Procesamiento de JSON en Go (Golang): encoding/json y alternativas
WebSocket en Rust: bibliotecas tokio-tungstenite y tungstenite