json :: Value类型的jsoncpp编译错误

时间:2018-01-11 05:24:13

标签: c++ json jsoncpp

这是架构:

{
"definitions": {
    "properties": {
        "Count": {
            "type": [
                "number",
                "null"
            ]
        }
    }
}

} 我想阅读“type”中的成员

我试图以多种方式尝试,例如

if(val["definitions"]["properties"]["Count"]["type"][0] == "number" and 
(val["definitions"]["properties"]["Count"]["type"][1] == "null"))
{
    //code here
}

这会导致以下错误

  

错误:在抛出'Json :: LogicError'的实例后调用终止what():在Json :: Value :: operator中:需要arrayValue Aborted(core dumped)

对于这段代码

if (val["definitions"]["properties"]["Count"]["type"][0].isMember("number") and 
(val["definitions"]["properties"]["Count"]["type"][0].isMember("null"))){
    //code here
}

我得到了

  

错误:在抛出'Json :: LogicError'实例后调用terminate   what():在Json :: Value :: find(key,end,found):需要objectValue或nullValue Aborted(core dumped)

2 个答案:

答案 0 :(得分:0)

你的代码是对的...你的json是错的... JsonCpp需要"定义"的引号并且你不能在数组或对象中的最后一项之后有额外的逗号。

只需将其更改为:

{
    "definitions": {
        "properties": {
            "Count": {
                "type": [
                    "number",
                    "null"
                ]
            }
        }
    }
}

- )

答案 1 :(得分:0)

 const Json::Value obj=val["definitions"]["properties"]["count"]["type"];
    if (std::find(obj.begin(),obj.end(),"string")!=obj.end() and 
 std::find(obj.begin(),obj.end(),"null")!=obj.end()){
    // code here;
    }