mirror of
https://github.com/nlohmann/json
synced 2024-11-27 06:10:06 +00:00
♻️ adjusted code to split headers
This commit is contained in:
parent
0e8f01a963
commit
541b46132d
@ -7397,6 +7397,7 @@ class basic_json
|
||||
diff for two JSON values.,diff}
|
||||
|
||||
@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)
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/// @}
|
||||
};
|
||||
|
||||
//////////////////
|
||||
|
@ -14894,7 +14894,6 @@ class basic_json
|
||||
}
|
||||
|
||||
/// @}
|
||||
|
||||
};
|
||||
|
||||
//////////////////
|
||||
|
Loading…
Reference in New Issue
Block a user