nlohmann 和复制地图

nlohmann and copying maps

有人知道如何快速将 nlohmann::json MAP 值复制到另一个 nlohmann::json 吗?

nlohmann::json j1;
nlohmann::json j2;

j1["MAP"]["value1"] = 1;
j2["MAP"]["value2"] = 2;
j2["MAP"] += j1["MAP"];

这会抛出异常,因为 += 会认为我正在向列表中添加一个值。

[json.exception.type_error.308] cannot use push_back() with object

我可以枚举j1["MAP"]并将它们添加到j2["MAP"]中,但我想知道是否有一个简单的方法。

json::update() 方法是此操作的 built-in 版本。

j2["MAP"].update(j1["MAP"]);

@cdhowie 的答案的另一种替代方法是 合并 这些对象, 这里是你需要的方法:merge_patch

因此您的代码应如下所示:

nlohmann::json j1;
nlohmann::json j2;

j1["MAP"]["value1"] = 1;
j2["MAP"]["value2"] = 2;
//j2["MAP"] += j1["MAP"];

j2.merge_patch(j1);

std::cout << "j2: " << j2.dump().c_str() << std::endl;

并会产生这样的结果:

j2:  {"MAP":{"value1":1,"value2":2}}

注意:即使使用 updatemerge_patch 结果相同,但在行为上存在一些差异那些方法:我引用开发 lib

的 nlohmann 爵士的话

所以最终由您选择更适合您的应用程序要求的方法