nlohmann 在不知道密钥的情况下解析 json 文件
nlohmann parsing a json file without knowing keys
我正在使用 nlohmann/json 库在 cpp 中使用 json。我有一个 Json::Value 对象,我想通过在不知道它们的情况下探索键来浏览我的 json 数据。我遇到了 documentation 但只找到了 object["mySuperKey"]
方法来探索数据,这意味着知道现有的密钥。
你能给我一些提示吗?
谢谢。
在创建 json 对象之后 - 有一些类型可以迭代。
在此 nlohmann::json
实现中,您与基本容器 (json::object
、json::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;
}
我正在使用 nlohmann/json 库在 cpp 中使用 json。我有一个 Json::Value 对象,我想通过在不知道它们的情况下探索键来浏览我的 json 数据。我遇到了 documentation 但只找到了 object["mySuperKey"]
方法来探索数据,这意味着知道现有的密钥。
你能给我一些提示吗?
谢谢。
在创建 json 对象之后 - 有一些类型可以迭代。
在此 nlohmann::json
实现中,您与基本容器 (json::object
、json::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;
}