在 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";
}