Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ nlohmann与地图复制_C++_Json_Nlohmann Json - Fatal编程技术网

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}}