比较Rapidjson文档错误 - 错误没有操作员[]匹配这些操作数



我正在尝试比较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()检索"读取"键的值。我一直在遇到问题以使我的代码在关注该教程时工作,并且使用这些"获取"方法是我唯一能够真正返回值的唯一方法。

希望这会有所帮助!

  1. newDocument的类型是什么,您如何创建它?我尝试运行您的代码(通过以与origDocument相同的方式创建NewDocument),而第一个==断言可以使用。如果newDocument是常规rapidjson::Document,则行const rapidjson::Value& a1 = newDocument["read"];应编译。

  2. 第二个断言正在尝试strcmp两个Rapidjson值对象,因此我认为预计不会编译。相反,您应该在每个值中使用.GetString()从值中获取const char*内容。

只是为了明确说明,您想做的应该有效:

  • Documentoperator[](实际上是GenericValue的子类)返回GenericValue对象参考。

  • 您可以将通用值与预期运算符==和!=进行比较。请参阅文档中的"均等和非平等运算符"部分。

相关内容

  • 没有找到相关文章

最新更新