有没有一种优雅的方法来使用jsoncpp级联合并两个JSON树?

时间:2014-03-19 16:36:13

标签: c++ json jsoncpp

我正在使用jsoncpp从JSON文件中读取设置。

我想有两个级联设置文件,比如MasterSettings.jsonLocalSettings.json,其中LocalSettings是MasterSettings的子集。我想先加载MasterSettings然后再加载LocalSettings。在LocalSettings的值与MasterSettings不同的情况下,该值将覆盖MasterSettings中的值。很像CSS中的级联。

使用jsoncpp有没有优雅的方法呢?

1 个答案:

答案 0 :(得分:8)

我将假设您的设置文件是JSON对象。

here所示,当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];
        }
    }
}