读取 JSON 中的每个字符串

Read every string inside a JSON

提问人: 提问时间:5/21/2020 更新时间:5/22/2020 访问量:116

问:

因此,我尝试使用 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 谢谢

C++ JSON 文件 IOSTREAM

评论

1赞 yaodav 5/21/2020
你得到什么?
0赞 5/22/2020
更新了帖子,即使我在 a.key/a.value 中添加了 & 仍然会给我一个语法错误
0赞 Asteroids With Wings 5/22/2020
在您链接到的页面上的 README 上有一个这样的例子......(ctrl+f “对象的特殊迭代器成员函数”)
0赞 Asteroids With Wings 5/22/2020
此外,这是一种非常冗长的写信方式......为什么不只是 ?std::mapm_Strings[a.key()] = a.value();
0赞 Asteroids With Wings 5/22/2020
m_Strings.emplace(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));
}