2.0 KiB
nlohmann::basic_json::merge_patch
void merge_patch(const basic_json& apply_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):
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.
Parameters
apply_patch(in)- the patch to apply
Exception safety
Basic guarantee: if an exception is thrown during the operation, the JSON value may be partially modified.
Complexity
Linear in the lengths of apply_patch.
Notes
apply_patch may be #!cpp *this itself or refer to a value contained in #!cpp *this (for example, a subobject
returned by #!cpp (*this)[key]); it is read as it was when merge_patch() was called, before any modification of
#!cpp *this.
Examples
??? example
The following code shows how a JSON Merge Patch is applied to a JSON document.
```cpp
--8<-- "examples/merge_patch.cpp"
```
Output:
```json
--8<-- "examples/merge_patch.output"
```
See also
- RFC 7396 (JSON Merge Patch)
- patch apply a JSON patch
Version history
- Added in version 3.0.0.
- Fixed use of freed or relocated memory when
apply_patchis#!cpp *thisor refers to a value contained in#!cpp *this, in version 3.13.0.