作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
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
。
最佳答案
正如你所说,strings是一个数组,而不是一个对象。您需要:(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]] = ...
}
或者至少存储找到 key 的字符串数组的索引。
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] ) );
}
关于c++ - 如何修复来自 getMemberNames() 的 JsonCPP 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11443956/
JSON 文件如下所示: { "strings": [ { "key_one": "value_one!" }, { "key_two": "v
本文整理了Java中org.apache.hadoop.hbase.procedure.ZKProcedureMemberRpcs.getMemberName()方法的一些代码示例,展示了ZKProc
我是一名优秀的程序员,十分优秀!