1
0
mirror of https://github.com/nlohmann/json synced 2024-11-23 12:30:06 +00:00

♻️ adjusted code to split headers

This commit is contained in:
Niels Lohmann 2018-01-14 10:34:43 +01:00
parent 0e8f01a963
commit 541b46132d
No known key found for this signature in database
GPG Key ID: 7F3CEA63AE251B69
2 changed files with 78 additions and 1 deletions

View File

@ -7397,6 +7397,7 @@ class basic_json
diff for two JSON values.,diff} diff for two JSON values.,diff}
@sa @ref patch -- apply a JSON patch @sa @ref patch -- apply a JSON patch
@sa @ref merge_patch -- apply a JSON Merge Patch
@sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902) @sa [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902)
@ -7528,6 +7529,83 @@ class basic_json
} }
/// @} /// @}
////////////////////////////////
// JSON Merge Patch functions //
////////////////////////////////
/// @name JSON Merge Patch functions
/// @{
/*!
@brief applies a JSON Merge Patch
The merge patch format is primarily intended for use with the HTTP PATCH
method as a means of describing a set of modifications to a target
resource's content. This function applies a merge patch to the current
JSON value.
The function implements the following algorithm from Section 2 of
[RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396):
```
define MergePatch(Target, Patch):
if Patch is an Object:
if Target is not an Object:
Target = {} // Ignore the contents and set it to an empty Object
for each Name/Value pair in Patch:
if Value is null:
if Name exists in Target:
remove the Name/Value pair from Target
else:
Target[Name] = MergePatch(Target[Name], Value)
return Target
else:
return Patch
```
Thereby, `Target` is the current object; that is, the patch is applied to
the current value.
@param[in] patch the patch to apply
@complexity Linear in the lengths of @a patch.
@liveexample{The following code shows how a JSON Merge Patch is applied to
a JSON document.,merge_patch}
@sa @ref patch -- apply a JSON patch
@sa [RFC 7396 (JSON Merge Patch)](https://tools.ietf.org/html/rfc7396)
@since version 3.0.0
*/
void merge_patch(const basic_json& patch)
{
if (patch.is_object())
{
if (not is_object())
{
*this = object();
}
for (auto it = patch.begin(); it != patch.end(); ++it)
{
if (it.value().is_null())
{
erase(it.key());
}
else
{
operator[](it.key()).merge_patch(it.value());
}
}
}
else
{
*this = patch;
}
}
/// @}
}; };
////////////////// //////////////////

View File

@ -14894,7 +14894,6 @@ class basic_json
} }
/// @} /// @}
}; };
////////////////// //////////////////