我正在尝试比较Rapidjson文档,但它给出了一个错误消息,我不确定如何修复(请参见上文)。
这是Rapidjson:
static const std::string& JSON()
{
static const std::string j =
"{"
""SimpleCompany:Manager":{"
""read":"true""
""update":"true""
""delete":"true""
""insert":"false""
"},"
""SimpleCompany:Manager":{"
""read":"true""
""update":"true""
""delete":"false""
""insert":"false""
"},"
"}";
return j;
}
这是我尝试将两个文档与大概相同的内容进行比较的地方:
rapidjson::StringStream strStream(JSON().c_str());
rapidjson::Document origDocument;
origDocument.ParseStream(strStream); //newDocument obtained other way
ASSERT_TRUE(newDocument["read"] == origDocument["read"]); //error no operator [] matches these operands
ASSERT_TRUE(strcmp(newDocument["read"] , origDocument["read"])); //error no operator [] matches these operands
const rapidjson::Value& a1 = newDocument["read"]; //error no operator [] matches these operands
任何想法如何正确比较其价值?我尝试了两种方法,但他们不喜欢[。
Milo说有一个平等操作员。看来我正在比较诸如Rapidjson教程之类的内容,尽管它们正在将钥匙与期望值进行比较,并且我正在比较两个文档的平等文档的键,这对我来说似乎还不错。
我遇到了类似的问题。检查/尝试的事情:
1)您在相关的代码块中是否有using namespace rapidjson;
?我认为不是因为我在您的orgiDocument
声明中看到您使用rapidjson::
。我认为,这个问题的一部分就像命名碰撞一样简单。(编译器不知道您正在尝试使用Rapidjson的Overloaded []操作员...我认为。)
2)我建议的第二件事是尝试使用newDocument["read"].GetBool()
检索"读取"键的值。我一直在遇到问题以使我的代码在关注该教程时工作,并且使用这些"获取"方法是我唯一能够真正返回值的唯一方法。
希望这会有所帮助!
-
newDocument
的类型是什么,您如何创建它?我尝试运行您的代码(通过以与origDocument
相同的方式创建NewDocument
),而第一个==
断言可以使用。如果newDocument
是常规rapidjson::Document
,则行const rapidjson::Value& a1 = newDocument["read"];
应编译。 -
第二个断言正在尝试
strcmp
两个Rapidjson值对象,因此我认为预计不会编译。相反,您应该在每个值中使用.GetString()
从值中获取const char*
内容。
只是为了明确说明,您想做的应该有效:
-
Document
的operator[]
(实际上是GenericValue的子类)返回GenericValue
对象参考。 -
您可以将通用值与预期运算符==和!=进行比较。请参阅文档中的"均等和非平等运算符"部分。