Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core/StarJson.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/core/StarJson.cpp')
-rw-r--r--source/core/StarJson.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/source/core/StarJson.cpp b/source/core/StarJson.cpp
index 3502996..83b4e67 100644
--- a/source/core/StarJson.cpp
+++ b/source/core/StarJson.cpp
@@ -1026,13 +1026,25 @@ Json jsonMerge(Json const& base, Json const& merger) {
res.first->second = jsonMerge(res.first->second, p.second);
}
return merged;
+ }
+ return merger.type() == Json::Type::Null ? base : merger;
+}
- } else if (merger.type() == Json::Type::Null) {
- return base;
-
- } else {
- return merger;
+Json jsonMergeNulling(Json const& base, Json const& merger) {
+ if (base.type() == Json::Type::Object && merger.type() == Json::Type::Object) {
+ JsonObject merged = base.toObject();
+ for (auto const& p : merger.toObject()) {
+ if (p.second.isNull())
+ merged.erase(p.first);
+ else {
+ auto res = merged.insert(p);
+ if (!res.second)
+ res.first->second = jsonMergeNulling(res.first->second, p.second);
+ }
+ }
+ return merged;
}
+ return merger;
}
bool jsonPartialMatch(Json const& base, Json const& compare) {