提问人: 提问时间:5/21/2020 更新时间:5/22/2020 访问量:116
读取 JSON 中的每个字符串
Read every string inside a JSON
问:
因此,我尝试使用 https://github.com/nlohmann/json 读取JSON文件中的每个字符串,并将字符串推送到映射中。我需要它来读取语言文件中的每个字符串以进行序列化。例:
{
"StringToRead1" : "Test",
"StringToRead2" : "Another Test"
}
所以我尝试使用迭代器并将所有内容推入:
std::ifstream iStream(filePath);
if(!iStream.is_open()) { std::cout << "Cannot open the strings language file.\n"; return -1; }
nlohmann::json json = nlohmann::json::parse(iStream);
for(auto a = json.begin(); a != json.end(); ++a) {
std::map<std::string, std::string>::iterator iterator = m_Strings.begin();
m_Strings.insert(iterator, std::pair<std::string, std::string>(a.key, a.value));
}
我收到以下编译错误: 错误 C3867:“nlohmann::d etail::iter_impl>>>::key”:语法不标准;使用 '&' 创建指针 错误 C3867:“nlohmann::d etail::iter_impl>>>::value”:语法不标准;使用 '&' 创建指针
感谢您的帮助,我希望我足够清楚。
溶液: a.key() 和 a.value() 而不是 a.key 和 a.value 谢谢
答:
1赞
yaodav
5/22/2020
#1
键和值是函数调用,因此需要使用函数运算符:
for(auto a = json.begin(); a != json.end(); ++a) {
std::map<std::string, std::string>::iterator iterator = m_Strings.begin();
m_Strings.insert(iterator, std::pair<std::string, std::string>(a.key(), a.value()));
}
而不是
for(auto a = json.begin(); a != json.end(); ++a) {
std::map<std::string, std::string>::iterator iterator = m_Strings.begin();
m_Strings.insert(iterator, std::pair<std::string, std::string>(a.key, a.value));
}
上一个:C++ 检查空文件中的 EOF
下一个:在我的解密程序中未收到输出文件
评论
std::map
m_Strings[a.key()] = a.value();
m_Strings.emplace(a.key(), a.value());