C++ 如何访问c+中nlohman JSON中JSON内部的数组元素+;?

C++ 如何访问c+中nlohman JSON中JSON内部的数组元素+;?,c++,arrays,json,C++,Arrays,Json,我有以下JSON文件 { "list" : { "type" : "school", "students" : [ { "name" : "ro

我有以下JSON文件

{
    "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