使用 Jsoncpp 简单读取 json 文件

simple reading of a json file using Jsoncpp

如果我有一个 json 文件:

{ “键1”:“值1”, “键2”:“值2” }

使用:

Json::Value root;
Json::Reader reader;

std::ifstream in(filePath.c_str());

if (!in)
{
    std::string errReason("Cannot open the settings file '");

    errReason += filePath;
    errReason += "'";

    throw std::domain_error(errReason);
}


bool parsingSuccessful = reader.parse(in, root);

if (!parsingSuccessful)
{
    std::cout << "Error parsing the string" << std::endl;
}
else
{
    std::cout << "Works" << std::endl;
}

Json::Value::Members names = root.getMemberNames();

for (int index = 0; index < names.size(); ++index)
{
    std::string key = names[index].asString();
    std::string value = root[key].asString();
    map_.insert(make_pair(key, value));
    std::cout << root[index] << std::endl;
}

我似乎无法为变量字符串赋值 'key'。

谁能解释一下我做错了什么?

变量 'names' 的类型是 Json::Value::Members,它是字符串向量 (std::vector) 而不是 Json::Value , 所以你不必添加 asString() 方法。

所以如果要修改'root'中'key'值的内容:

for (int index = 0; index < names.size(); ++index)
{
    std::string key = names[index];
    root[key] = value ;
    std::cout << root[key] << std::endl;
}

如果您只想读取 json 文件并将其值存储在地图中:

for (int index = 0; index < names.size(); ++index)
{
    std::string key = names[index];
    std::string value = root[key].asString();
    map_.insert(make_pair(key, value));
    std::cout << root[key] << std::endl;
}