如何修复getMemberNames()中的JsonCPP错误
How to fix JsonCPP error from getMemberNames()?
JSON文件如下所示:
{
"strings": [
{
"key_one": "value_one!"
},
{
"key_two": "value_two!"
},
]
}
C++文件如下所示:
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse(contents, root);
const Json::Value strings = root["strings"];
std::vector<std::string> list = strings.getMemberNames();
"strings.getMemberNames()"导致的错误为:
Assertion failed: (type_ == nullValue || type_ == objectValue), function getMemberNames, file /projects/.../jsoncpp.cpp,
strings
是一个arrayValue,我通过得到它的ValueType = 6
来确认它。
正如您所说,字符串是一个数组,而不是对象。您需要:(i)将字符串json转换为对象。
{
"strings": {
"key_one": "value_one!",
"key_two": "value_two!"
}
}
在这种情况下,您现有的代码将是好的。如果您可以控制正在解析的json,我会这么做。
或者(ii)遍历字符串数组-只有当json由第三方指定时,我才会这样做-它看起来像这样:
std::vector<std::string> all_keys;
for ( int index = 0; index < strings.size(); ++index ) {
std::vector<std::string> cur_keys = strings[index].getMemberNames();
all_keys.insert( all_keys.end(), cur_keys.begin(), cur_keys.end() );
}
然而,以后实际使用all_keys中的值访问字符串数组中的任何内容都会很痛苦,因此您可能希望将键值对存储在映射中。
std::map<std::string,std::string> key_values;
for ( int index = 0; index < strings.size(); ++index ) {
std::vector<std::string> cur_keys = strings[index].getMemberNames();
for( int j=0; j<cur_keys.size(); ++j )
key_values[cur_keys[j]] = ...
}
或者至少存储找到键的字符串数组的索引。
std::vector<std::pair<int,std::string> > all_keys; std::vector<std::string> all_keys;
for ( int index = 0; index < strings.size(); ++index ) {
std::vector<std::string> cur_keys = strings[index].getMemberNames();
for( int j=0; j<cur_keys.size(); ++j )
all_keys.push_back( std::make_pair(index, cur_keys[j] ) );
}
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 将它们添加到C 中的JSONCPP模块中的数组之后
- 使用 C++ 和 Jsoncpp 解析 AWS S3 中的 json 文件
- 无法解析在 0MQ 套接字中收到的 Jsoncpp 对象
- 如何使用C 中的JSONCPP解析器解析对象/数组
- 如何修复getMemberNames()中的JsonCPP错误
- JSONCPP.通过匹配值查找数组中的对象
- JSONcpp遍历对象中的列表
- 如何使用jsonCpp查找JSON数据中的对象或数组的数量
- 将JSON文件中的单个值替换为JSONcpp