JSON 使用 nlohmann::json jpointer 作为动态字符串和默认值
JSON using nlohmann::json jpointer for dynamic string and default value
在 nlohmann::json 库中,如果未找到密钥,则提供 return 默认值,如下所示
j.value("/Parent/child"_json_pointer, 100);
如果找不到“/Parent/child”,将 return 编辑此处的 100
但是如果“/Parent/child”像数组一样是动态的,例如
例如。 /Parent/child/数组/0/键
/Parent/child/数组/1/键
然后我需要创建 json 指针,如下所示
nlohmann::json::json_pointer jptr(str) //str = "/Parent/child/array/0/key"
如何使用 "jptr" 获取默认值行为。还有其他办法吗
添加示例代码。
Json 文件
{
"GNBDUFunction": {
"gnbLoggingConfig": [{
"moduleId": "OAMAG",
"logLevel": "TRC"
},
{
"moduleId": "FSPKT",
"logLevel": "TRC"
}
],
"ngpLoggingConfig": [{
"moduleId": "MEM",
"logLevel": "FATAL"
},
{
"moduleId": "BUF",
"logLevel": "FATAL"
},
{
"moduleId": "PERF",
"logLevel": "FATAL"
}
]
}
}
代码
#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>
#include <string>
using namespace std;
using json = nlohmann::json;
void parse(json& j,std::string path) {
nlohmann::json::json_pointer jptr(path);
json &child = j.at(jptr);
std::string moduleId = child.at("moduleId");
std::string loglvl = child.at("logLevel","FATAL");//How to get with default ??
}
int main()
{
std::ifstream name("test.json");
json j = nlohmann::json::parse(name);
std::string path ="GNBDUFunction/gnbLoggingConfig";
int count = j.at("/GNBDUFunction/gnbLoggingConfig"_json_pointer).size();
for (int i = 0 ; i < count ;++i)
{
const std::string sub_path = "/" + path + "/" +std::to_string(i);
parse(j,sub_path);
}
return 0;
}
首先,您可以将 ::value
与 json_pointer
一起使用。
其次,可以使用/
运算符构造新的json_pointers。
因此,您的 main
函数可以执行以下操作:
json j = nlohmann::json::parse(name);
auto root = "/GNBDUFunction/gnbLoggingConfig"_json_pointer;
size_t count = j.at(root).size();
for (size_t i = 0 ; i < count ; ++i) {
auto sub_path = root / i / "moduleId" / "logLevel";
std::string loglvl = j.value(sub_path, "FATAL");
}
在 nlohmann::json 库中,如果未找到密钥,则提供 return 默认值,如下所示
j.value("/Parent/child"_json_pointer, 100);
如果找不到“/Parent/child”,将 return 编辑此处的 100 但是如果“/Parent/child”像数组一样是动态的,例如
例如。 /Parent/child/数组/0/键
/Parent/child/数组/1/键
然后我需要创建 json 指针,如下所示
nlohmann::json::json_pointer jptr(str) //str = "/Parent/child/array/0/key"
如何使用 "jptr" 获取默认值行为。还有其他办法吗
添加示例代码。
Json 文件
{
"GNBDUFunction": {
"gnbLoggingConfig": [{
"moduleId": "OAMAG",
"logLevel": "TRC"
},
{
"moduleId": "FSPKT",
"logLevel": "TRC"
}
],
"ngpLoggingConfig": [{
"moduleId": "MEM",
"logLevel": "FATAL"
},
{
"moduleId": "BUF",
"logLevel": "FATAL"
},
{
"moduleId": "PERF",
"logLevel": "FATAL"
}
]
}
}
代码
#include <iostream>
#include <fstream>
#include <nlohmann/json.hpp>
#include <string>
using namespace std;
using json = nlohmann::json;
void parse(json& j,std::string path) {
nlohmann::json::json_pointer jptr(path);
json &child = j.at(jptr);
std::string moduleId = child.at("moduleId");
std::string loglvl = child.at("logLevel","FATAL");//How to get with default ??
}
int main()
{
std::ifstream name("test.json");
json j = nlohmann::json::parse(name);
std::string path ="GNBDUFunction/gnbLoggingConfig";
int count = j.at("/GNBDUFunction/gnbLoggingConfig"_json_pointer).size();
for (int i = 0 ; i < count ;++i)
{
const std::string sub_path = "/" + path + "/" +std::to_string(i);
parse(j,sub_path);
}
return 0;
}
首先,您可以将 ::value
与 json_pointer
一起使用。
其次,可以使用/
运算符构造新的json_pointers。
因此,您的 main
函数可以执行以下操作:
json j = nlohmann::json::parse(name);
auto root = "/GNBDUFunction/gnbLoggingConfig"_json_pointer;
size_t count = j.at(root).size();
for (size_t i = 0 ; i < count ; ++i) {
auto sub_path = root / i / "moduleId" / "logLevel";
std::string loglvl = j.value(sub_path, "FATAL");
}