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}}
注意:即使使用 update 或 merge_patch 结果相同,但在行为上存在一些差异那些方法:我引用开发 lib
的 nlohmann 爵士的话
- JSON Merge Patch (https://www.rfc-editor.org/rfc/rfc7396) 是官方标准,而 update 只是合并 JSON 个对象的函数。
- JSON 合并补丁允许删除,而更新会将现有值更改为空值。
- 两者都只适用于对象,而 JSON 补丁 (https://github.com/nlohmann/json#json-pointer-and-json-patch) 适用于任何 JSON 类型。
所以最终由您选择更适合您的应用程序要求的方法
有人知道如何快速将 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}}
注意:即使使用 update 或 merge_patch 结果相同,但在行为上存在一些差异那些方法:我引用开发 lib
的 nlohmann 爵士的话- JSON Merge Patch (https://www.rfc-editor.org/rfc/rfc7396) 是官方标准,而 update 只是合并 JSON 个对象的函数。
- JSON 合并补丁允许删除,而更新会将现有值更改为空值。
- 两者都只适用于对象,而 JSON 补丁 (https://github.com/nlohmann/json#json-pointer-and-json-patch) 适用于任何 JSON 类型。
所以最终由您选择更适合您的应用程序要求的方法