diff --git a/include/nlohmann/json.hpp b/include/nlohmann/json.hpp index 47d5c51ff..5e44e8d70 100644 --- a/include/nlohmann/json.hpp +++ b/include/nlohmann/json.hpp @@ -3497,6 +3497,9 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec if (it2 != m_data.m_value.object->end()) { it2->second.update(it.value(), true); +#if JSON_DIAGNOSTICS + it2->second.set_parents(); +#endif continue; } } diff --git a/single_include/nlohmann/json.hpp b/single_include/nlohmann/json.hpp index 2e16ad5b9..d2165e8ef 100644 --- a/single_include/nlohmann/json.hpp +++ b/single_include/nlohmann/json.hpp @@ -24000,6 +24000,9 @@ class basic_json // NOLINT(cppcoreguidelines-special-member-functions,hicpp-spec if (it2 != m_data.m_value.object->end()) { it2->second.update(it.value(), true); +#if JSON_DIAGNOSTICS + it2->second.set_parents(); +#endif continue; } } diff --git a/tests/src/unit-diagnostics.cpp b/tests/src/unit-diagnostics.cpp index c5feafe44..1e8ed6aa3 100644 --- a/tests/src/unit-diagnostics.cpp +++ b/tests/src/unit-diagnostics.cpp @@ -262,4 +262,16 @@ TEST_CASE("Regression tests for extended diagnostics") CHECK(k.dump() == "{\"prop1\":\"prop1_value\",\"root\":\"root_str\"}"); } + + SECTION("Regression test for issue #4813 - update() with merge_objects=true triggers JSON_ASSERT with JSON_DIAGNOSTICS") + { + // https://github.com/nlohmann/json/issues/4813 + nlohmann::ordered_json j1 = {{"numbers", {{"one", 1}}}}; + nlohmann::ordered_json const j2 = {{"numbers", {{"two", 2}}}, {"string", "t"}}; + CHECK_NOTHROW(j1.update(j2, true)); + CHECK(j1["numbers"]["one"] == 1); + CHECK(j1["numbers"]["two"] == 2); + CHECK(j1["string"] == "t"); + } } +