在 jsoncpp 中使用带有 json 值的 if else 语句
Using if else statement with json values in jsoncpp
我正在尝试在 returns json 值作为字符串的函数中使用 jsoncpp
做类似的事情。
std::string some_function(std::string val){
.
.
.
if(val=="date")
{
Json::Value my=root["data"]["date"];
std::cout<<"Date";
}
else if(val=="id")
{
Json::Value my=root["data"]["id"];
std::cout<<"ID";
}
else if(val=="art")
{
Json::Value my=root["data"]["article"];
std::cout<<"Article";
}
else
{
return "Error";
}
//Json::Value my=root["data"]["date"]; //this works
return my.toStyledString();
}
我能够成功 运行 json 值示例:Json::Value my=root["data"]["date"];
在 if else 语句之外(注释掉代码)但是当我尝试 运行 这些 json if-else-if 语句中的值显示此错误
warning: control reaches end of non-void function [-Wreturn-type]
我想这不是您遇到的唯一错误,您应该会遇到 my
未在任何地方定义或声明的错误。
那是因为你有很多变量 my
但每个变量只在其自己的范围内定义,并且 none 在函数范围内声明。由于没有这样的变量,您会因为第一个错误而得到一个后续变量。
解决方案非常简单:在 if
-else if
-else
链之前声明 one 变量并仅使用普通赋值:
Json::Value my;
if(val=="date")
{
my=root["data"]["date"];
std::cout<<"Date";
}
...
顺便说一句,我不会这样写这样的函数。我可能会做类似
的事情
std::string some_function(std::string val)
{
static std::string const valid_values[] = { "date", "id", "art" };
if (std::any_of(std::begin(valid_values), std::end(valid_values),
[&](auto const& s)
{
return s == val;
}))
{
return root["data"][val];
}
return "Error";
}
我正在尝试在 returns json 值作为字符串的函数中使用 jsoncpp
做类似的事情。
std::string some_function(std::string val){
.
.
.
if(val=="date")
{
Json::Value my=root["data"]["date"];
std::cout<<"Date";
}
else if(val=="id")
{
Json::Value my=root["data"]["id"];
std::cout<<"ID";
}
else if(val=="art")
{
Json::Value my=root["data"]["article"];
std::cout<<"Article";
}
else
{
return "Error";
}
//Json::Value my=root["data"]["date"]; //this works
return my.toStyledString();
}
我能够成功 运行 json 值示例:Json::Value my=root["data"]["date"];
在 if else 语句之外(注释掉代码)但是当我尝试 运行 这些 json if-else-if 语句中的值显示此错误
warning: control reaches end of non-void function [-Wreturn-type]
我想这不是您遇到的唯一错误,您应该会遇到 my
未在任何地方定义或声明的错误。
那是因为你有很多变量 my
但每个变量只在其自己的范围内定义,并且 none 在函数范围内声明。由于没有这样的变量,您会因为第一个错误而得到一个后续变量。
解决方案非常简单:在 if
-else if
-else
链之前声明 one 变量并仅使用普通赋值:
Json::Value my;
if(val=="date")
{
my=root["data"]["date"];
std::cout<<"Date";
}
...
顺便说一句,我不会这样写这样的函数。我可能会做类似
的事情std::string some_function(std::string val)
{
static std::string const valid_values[] = { "date", "id", "art" };
if (std::any_of(std::begin(valid_values), std::end(valid_values),
[&](auto const& s)
{
return s == val;
}))
{
return root["data"][val];
}
return "Error";
}