我正在使用jsoncpp从JSON文件中读取设置.
我想有两个级联设置文件,说MasterSettings.json
和LocalSettings.json
这里LocalSettings是MasterSettings的一个子集.我想先加载MasterSettings然后再加载LocalSettings.在LocalSettings的值与MasterSettings不同的情况下,该值将覆盖MasterSettings中的值.很像CSS中的级联.
用jsoncpp有没有优雅的方法呢?
Nar*_*lei 10
我将假设您的设置文件是JSON对象.
正如所看到的在这里,当JSONCpp解析一个文件时,它会清除根节点的内容.这意味着尝试在旧文件之上解析新文件将不会保留旧数据.但是,如果将两个文件解析为单独的Json :: Value节点,则可以通过使用getMemberNames迭代第二个对象中的键来自行递归复制值.
// Recursively copy the values of b into a. Both a and b must be objects.
void update(Json::Value& a, Json::Value& b) {
if (!a.isObject() || !b.isObject()) return;
for (const auto& key : b.getMemberNames()) {
if (a[key].isObject()) {
update(a[key], b[key]);
} else {
a[key] = b[key];
}
}
}
Run Code Online (Sandbox Code Playgroud)