nlohmann 在不知道密钥的情况下解析 json 文件

nlohmann parsing a json file without knowing keys

我正在使用 nlohmann/json 库在 cpp 中使用 json。我有一个 Json::Value 对象,我想通过在不知道它们的情况下探索键来浏览我的 json 数据。我遇到了 documentation 但只找到了 object["mySuperKey"] 方法来探索数据,这意味着知道现有的密钥。

你能给我一些提示吗?

谢谢。

在创建 json 对象之后 - 有一些类型可以迭代。 在此 nlohmann::json 实现中,您与基本容器 (json::objectjson::array) 进行交互,两者都具有可以轻松检索或打印的密钥。

Here is a small example 实现了递归(或不递归)遍历 json 对象并打印键和值类型的函数。

示例代码:

#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;
}