我使用rapidjson库来解析json数据。
要读取我使用的元素,例如,此代码:
Document d;
d.Parse(json); //Parse JSON data
d["name"].Accept(writer)
将其发送到StringBuffer,它允许我以String形式读取数据。但是现在我正试图让这种阅读充满活力。现在我读了“名字”字段,但这可能有所不同。所以我想用变量做这个,我尝试了这个:
String s = "name";
d[s].Accept(writer)
但这会导致错误
表达式必须具有整数或未整合的枚举类型
我该如何解决这个问题?
答案 0 :(得分:1)
当你调用d["name"]
c ++运算符重载的原因时,我无法说出实际发生了什么,但" name"基本上是const char*
而不是字符串。
所以我会假设
const char* s = "name";
d[s].Accept(writer);
会更好。
实际上在c ++中,标准运算符[]被定义为采用std :: size_t。字符串不能转换为std :: size_t,但任何指针(如const char*
)都可以。这意味着"整数或无范围的枚举"。
但是对于地图类型,[]运算符可以采用非整数值,例如复杂对象等。但似乎你的operator []的行为与标准数组下标相似。
BTW:在rapidjson中(我刚检查了github源代码),GenericDocument是一个具有运算符的GenericValue
GenericValue& operator[](const std::basic_string<Ch>& name) { return (*this)[GenericValue(StringRef(name))]; }
因此,您可以使用std::string
。
答案 1 :(得分:-1)
当我们不知道变量的类型时,很难回答这个问题。我假设d
正在解决包含某种MyClass
类型具有Accept函数的对象的集合。
如果您需要此类行为,则必须使用类似std地图的内容。
它的用法如下:
// The key type is string and the value type is myClass
// key value
map<string, MyClass> myDict;
myDict["name"].Accept(writer);
现在你可以拥有一个与MyClass相关联的字符串。
顺便说一下,string
以小写字母开头。编译器找不到String
。
编辑:
啊! d
的类型是json文档!如果要操作这样的json文档,则必须使用外部库,例如jsoncpp
编辑: 似乎你已经使用了json库。