Estoy usando la biblioteca nlohmann / json para usar json en cpp. Tengo un objeto Json :: Value y me gustaría revisar mis datos json explorando las claves sin conocerlas. Encontré la documentación pero solo encontré la { Método {X0}} para explorar los datos lo que significa conocer las claves existentes.

¿Podrías darme algunos consejos?

Gracias.

0
pipou 23 sep. 2019 a las 21:32

1 respuesta

La mejor respuesta

Bueno, después de crear un objeto json, hay tipos que se pueden iterar. en esta implementación de nlohmann::json con la que interactúa con los contenedores básicos (json::object, json::array) ambos tienen claves que se pueden recuperar o imprimir fácilmente.

Aquí hay un pequeño ejemplo que implementa una función para recursivamente (o not) atraviesa el objeto json e imprime las claves y los tipos de valor.

El código del ejemplo:

#include <iostream>
#include <vector>
#include "json3.6.1.hpp"

void printObjectkeys(const nlohmann::json& jsonObject, bool recursive, int ident) {
    if (jsonObject.is_object() || jsonObject.is_array()) {
        for (auto &it : jsonObject.items()) {
            std::cout << std::string(ident, ' ')
                      << it.key() << " -> "
                      << it.value().type_name() << std::endl;
            if (recursive && (it.value().is_object() || it.value().is_array()))
                printObjectkeys(it.value(), recursive, ident + 4);
        } 
    }
}

int main()
{
    //Create the JSON object:
    nlohmann::json jsonObject = R"(
        {
            "name"    : "XYZ",
            "active"  : true,
            "id"      : "4509237",
            "origin"  : null,
            "user"    : { "uname" : "bob", "uhight" : 1.84 },
            "Tags"    :[
                {"tag": "Default", "id": 71},
                {"tag": "MC16",    "id": 21},
                {"tag": "Default", "id": 11},
                {"tag": "MC18",    "id": 10}
            ],
            "Type"    : "TxnData"
        }
    )"_json;
    std::cout << std::endl << std::endl << "Read Object key, not recursive :" << std::endl;
    printObjectkeys(jsonObject, false, 1);  
    std::cout << std::endl << std::endl << "Read Object key, recursive :" << std::endl;
    printObjectkeys(jsonObject, true, 1);

    return 0;
}
0
Shlomi Hassid 19 oct. 2019 a las 13:28