C++ nlohmann与地图复制
任何人都知道如何快速复制C++ nlohmann与地图复制,c++,json,nlohmann-json,C++,Json,Nlohmann Json,任何人都知道如何快速复制nlohmann::json将值映射到另一个nlohmann::json nlohmann::json j1; nlohmann::json j2; j1["MAP"]["value1"] = 1; j2["MAP"]["value2"] = 2; j2["MAP"] += j1["MAP"]; 这将抛出,因为+=将认为我正在向列表中添加值 [jso
nlohmann::json
将值映射到另一个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]无法对对象使用push_back()
我可以枚举j1[“MAP”]
并将它们添加到j2[“MAP”]
中,但我想知道是否有一个简单的方法。该方法是此操作的内置版本
j2["MAP"].update(j1["MAP"]);
@cdhowie答案的另一个替代方法是合并这些对象, 以下是您需要的方法: 因此,您的代码应该如下所示:
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;
注:尽管使用更新或合并补丁的结果相同,但这些方法的行为仍存在一些差异:我引用了开发lib的nlohmann爵士的话
- JSON合并补丁()是一个官方标准,而update只是一个组合JSON对象的函数
- JSON合并补丁允许删除,而更新会将现有值更改为null
- 两者都只适用于对象,而JSON补丁()适用于任何JSON类型
因此,最终取决于您选择更适合您的应用程序需求的方法。非常感谢。这就是我需要的!
j2: {"MAP":{"value1":1,"value2":2}}