C++ Rapidjson Find成员

C++ Rapidjson Find成员,c++,rapidjson,C++,Rapidjson,我有一个JSON字符串,如下所示: {"callCommand":{"command":"car","floor":"2","landing":"front"}} 现在,我想检查是否有名为command的名称,并获取值。可能吗?我的代码如下,但不起作用 const char json[] = "{\"callCommand\":{\"command\":\"car\",\"floor\":\"2\",\"landing\":\"front\"}}"; rapidjson::Value::Co

我有一个JSON字符串,如下所示:

{"callCommand":{"command":"car","floor":"2","landing":"front"}}
现在,我想检查是否有名为
command
的名称,并获取值。可能吗?我的代码如下,但不起作用

const char json[] = "{\"callCommand\":{\"command\":\"car\",\"floor\":\"2\",\"landing\":\"front\"}}";

rapidjson::Value::ConstMemberIterator itr = d.FindMember("command");

if (itr != d.MemberEnd())
    printf("command = %s\n", d["callCommand"]["command"].GetString());

您可以使用rapidjson的
HasMember
功能,如下所示:

Document doc;
doc.Parse(json);
doc.HasMember("command");//true or false

您可以使用rapidjson的
HasMember
功能,如下所示:

Document doc;
doc.Parse(json);
doc.HasMember("command");//true or false
您正在文档的顶层搜索“命令”:

d.FindMember("command");
当您应该在“callCommand”中搜索它时:

另外,在使用FindMember搜索之后,应该使用迭代器,而不是使用运算符[]再次搜索。比如:

// assuming that "callCommand" exists
rapidjson::Value& callCommand = d["callCommand"];
rapidjson::Value::ConstMemberIterator itr = callCommand.FindMember("command");

// assuming "command" is a String value
if (itr != callCommand.MemberEnd())
    printf("command = %s\n", itr->value.GetString());
您正在文档的顶层搜索“命令”:

d.FindMember("command");
当您应该在“callCommand”中搜索它时:

另外,在使用FindMember搜索之后,应该使用迭代器,而不是使用运算符[]再次搜索。比如:

// assuming that "callCommand" exists
rapidjson::Value& callCommand = d["callCommand"];
rapidjson::Value::ConstMemberIterator itr = callCommand.FindMember("command");

// assuming "command" is a String value
if (itr != callCommand.MemberEnd())
    printf("command = %s\n", itr->value.GetString());

只有知道json是如何构造的,此解决方案才有效。不幸的是,FindMember不是以递归方式工作的。只有知道json是如何构造的,此解决方案才能工作。FindMember不以递归方式工作。不幸的是,根据他们自己的文档,应该使用FindMember。根据他们自己的文档,应该使用FindMember。