JsonCPP throwing a logic error:requires objectValue or nullValue
JsonCPP throwing a logic error:requires objectValue or nullValue
void exp::example(std::string &a, std::string &b)
{
if (m_root.isObject() && m_root.isMember(a))
{
if (m_root[a].isMember(b))
{
m_root[a].append(b);
}
}
else
{
m_root[a] = Json::arrayValue;
m_root[a].append(b);
}
}
(m_root 在 hpp 中定义)
当我运行这段代码时,我得到了逻辑错误:
在 Json::Value::find(key, end, found) 中:需要 objectValue 或 nullValue。
如果出现以下情况,我发现我从中得到了这个错误:
if (m_root[a].isMember(b))
我不明白为什么会出现这个错误,我在他上面的 if 中使用了相同的函数,但我没有出现这个错误。
P.S函数一直运行到进入嵌套if,例子:
a
b
m_root
"hey"
"a1"
{"hey":["a1"]}
"bye"
"a2"
{"hey":["a1"], "bye":["b1"]}
"cye"
"a3"
{"hey":["a1"], "bye":["b1"], "cye":["a3"]}
"hey"
"a4"
error: in Json::Value::find(key, end, found): requires objectValue or nullValue
我只在第 4 次调用时遇到错误。
感谢您的帮助!
在第 4 次迭代中,您访问类型为 arrayValue
的 m_root["hey"]
对象。 isMember
方法不支持这些值。
您必须以另一种方式在数组中查找值。我建议遍历数组,例如:
bool is_inside_array(const Json::Value &json_array, const string& value_to_find)
{
for (const Json::Value& array_value: json_array) {
if (array_value.asString() == value_to_find) {
return true;
}
}
return false;
}
然后将里面的if
替换为:
if (is_inside_array(m_root[a], b))
void exp::example(std::string &a, std::string &b)
{
if (m_root.isObject() && m_root.isMember(a))
{
if (m_root[a].isMember(b))
{
m_root[a].append(b);
}
}
else
{
m_root[a] = Json::arrayValue;
m_root[a].append(b);
}
}
(m_root 在 hpp 中定义)
当我运行这段代码时,我得到了逻辑错误:
在 Json::Value::find(key, end, found) 中:需要 objectValue 或 nullValue。
如果出现以下情况,我发现我从中得到了这个错误:
if (m_root[a].isMember(b))
我不明白为什么会出现这个错误,我在他上面的 if 中使用了相同的函数,但我没有出现这个错误。
P.S函数一直运行到进入嵌套if,例子:
a | b | m_root |
---|---|---|
"hey" | "a1" | {"hey":["a1"]} |
"bye" | "a2" | {"hey":["a1"], "bye":["b1"]} |
"cye" | "a3" | {"hey":["a1"], "bye":["b1"], "cye":["a3"]} |
"hey" | "a4" | error: in Json::Value::find(key, end, found): requires objectValue or nullValue |
我只在第 4 次调用时遇到错误。 感谢您的帮助!
在第 4 次迭代中,您访问类型为 arrayValue
的 m_root["hey"]
对象。 isMember
方法不支持这些值。
您必须以另一种方式在数组中查找值。我建议遍历数组,例如:
bool is_inside_array(const Json::Value &json_array, const string& value_to_find)
{
for (const Json::Value& array_value: json_array) {
if (array_value.asString() == value_to_find) {
return true;
}
}
return false;
}
然后将里面的if
替换为:
if (is_inside_array(m_root[a], b))