C++ 如何访问c+中nlohman JSON中JSON内部的数组元素+;?
我有以下JSON文件C++ 如何访问c+中nlohman JSON中JSON内部的数组元素+;?,c++,arrays,json,C++,Arrays,Json,我有以下JSON文件 { "list" : { "type" : "school", "students" : [ { "name" : "ro
{
"list" :
{
"type" : "school",
"students" : [
{
"name" : "root",
"marks" : "100"
},
{
"name" : "joe",
"version" : "100"
}]
}
}
在代码中,我解析了这个JSON文件,并将这个JSON对象分配给JSON::student。所以我可以将第一个元素分配给字符串,如下所示:
std::string type = student["list"]["type"];
它是有效的。同样,我想对“students”数组中的“name”和“marks”进行处理。我该怎么做呢?您可以使用迭代器对所有元素进行迭代
std::string const str = "{ \"list\" : { \"type\" : \"school\", \"students\" : [ "
"{ \"name\" : \"root\", \"marks\" : \"100\"}, "
"{ \"name\" : \"joe\", \"version\" : \"100\" } "
"] } }";
nlohmann::json const js = nlohmann::json::parse(str);
nlohmann::json const& ja = js["list"]["students"];
for (auto it = ja.begin(); it != ja.end(); ++it) {
// For each individual element (root, joe, ...)
if (it->contains("name")) {
std::string const name = (*it)["name"].get<std::string>();
// Do something with the name
}
if (it->contains("marks")) {
std::string const marks = (*it)["marks"].get<std::string>();
// Do something with the marks
}
if (it->contains("version")) {
std::string const version = (*it)["version"].get<std::string>();
// Process version
}
// ...
}
std::string const str=“{\”列表\“:{\”类型\“:\”学校\“,\”学生\“:[”
“{\'name\':\'root\',\'marks\':\'100\'”
“{\'name\':\'joe\',\'version\':\'100\'”
"] } }";
nlohmann::json const js=nlohmann::json::parse(str);
nlohmann::json const&ja=js[“列表”][“学生”];
for(auto-it=ja.begin();it!=ja.end();+it){
//对于每个单独的元素(根、joe等)
如果(它->包含(“名称”)){
std::string const name=(*it)[“name”].get();
//用这个名字做点什么
}
如果(它->包含(“标记”)){
std::string const marks=(*it)[“marks”].get();
//用这些记号做点什么
}
如果(它->包含(“版本”)){
std::string const version=(*it)[“version”].get();
//过程版本
}
// ...
}
您只需像普通数组一样迭代它们const std::string&name0=student[“list”][“students”][0][“name”]
@SergeyA不起作用解释不起作用
。我尝试了这个方法,但在我的例子中,它并没有以某种方式进入for循环。知道为什么吗?嘿@Nilesh你是怎么测试的?您是否可以在声明ja
:std::cout按照复制粘贴的方式尝试此代码,并按照上面的建议插入输出。如果这样做有效,并且您已经修改了代码以满足您的需要,请随意以屏幕截图或类似的形式共享您的代码…std::ifstream student_文件(“/home/root/student.json”,std::ifstream::binary);学生档案>>学生;std::字符串名称1;nlohmann::json const&ja=student[“list”][“students”];对于(auto-it=ja.begin();it!=ja.end();++it){if(it->count(“name”)!=0){name1=(*it)[“name”].get();}}
这就是我的代码。我正在读取一个json文件。但在这里,它甚至没有进入for循环once@Nilesh我刚刚试过你的代码,对我来说它很有效。如果我把std::cout