* 📡 Fix documentation gaps for 3.13.0 release (todos 138-142) - Todo 138: Add "Known issues" section to modules.md with compiler-specific troubleshooting (GCC redefinition, MSVC symbol export). Add pointer note to quality_assurance.md. - Todo 139: Document CBOR/MessagePack half-precision float encoding for NaN/Infinity (0xF9/0xCA with exact byte sequences). Explain pre-3.13.0 double-precision bug mechanism without issue citations. - Todo 140: Document CBOR negative-integer-overflow rejection (parse_error.112) for magnitudes exceeding int64_t range (already implemented in rev 1). - Todo 141: Update version history in value.md and operator[].md with behavior-change details, removing issue citations per citation policy (prose is self-contained). - Todo 142: Global sed replace of 3.12.x → 3.13.0 placeholder across all 20 documentation files. Revision 2 incorporates feedback to reduce changelog-like issue citations. Only citations that add unique troubleshooting value are retained (#5103 for GCC workaround, #3970 for MSVC symbol export). "Known issues" section follows PR #5252's visual pattern (info admonition with bold-bullet format). Signed-off-by: Niels Lohmann <mail@nlohmann.me> * 📡 Document integer type selection, type_name() invalid value, and std::optional get() fix - number_handling.md: clarify that positive/negative integers select unsigned/signed storage based on the leading minus sign (todo 143). - type_name.md: document the new "invalid" return value for corrupted JSON values (todo 145). - get.md: note that get<std::optional<T>>() was unreachable in every configuration prior to 3.13.0 due to an internal macro-guard bug, unrelated to JSON_USE_IMPLICIT_CONVERSIONS's actual effect (todo 144). Signed-off-by: Niels Lohmann <mail@nlohmann.me> --------- Signed-off-by: Niels Lohmann <mail@nlohmann.me>
2.9 KiB
nlohmann::basic_json::patch_inplace
void patch_inplace(const basic_json& json_patch);
JSON Patch defines a JSON document structure for expressing a sequence of operations to apply to a JSON document. With this function, a JSON Patch is applied to the current JSON value by executing all operations from the patch. This function applies a JSON patch in place and returns void.
Parameters
json_patch(in)- JSON patch document
Exception safety
No guarantees, value may be corrupted by an unsuccessful patch operation.
Exceptions
- Throws
parse_error.104if the JSON patch does not consist of an array of objects. - Throws
parse_error.105if the JSON patch is malformed (e.g., mandatory attributes are missing); example:"operation add must have member path". - Throws
out_of_range.401if an array index is out of range. - Throws
out_of_range.403if a JSON pointer inside the patch could not be resolved successfully in the current JSON value; example:"key baz not found". - Throws
out_of_range.405if JSON pointer has no parent ("add", "remove", "move") - Throws
out_of_range.411if an "add" operation's target location has a parent that is neither an object nor an array. - Throws
other_error.501if "test" operation was unsuccessful.
Complexity
Linear in the size of the JSON value and the length of the JSON patch. As usually the patch affects only a fraction of the JSON value, the complexity can usually be neglected.
Notes
Unlike patch, patch_inplace applies the operation "in place" and no copy of the JSON value is created.
That makes it faster for large documents by avoiding the copy. However, the JSON value might be corrupted if the
function throws an exception.
Examples
??? example
The following code shows how a JSON patch is applied to a value.
```cpp
--8<-- "examples/patch_inplace.cpp"
```
Output:
```json
--8<-- "examples/patch_inplace.output"
```
See also
- RFC 6902 (JSON Patch)
- RFC 6901 (JSON Pointer)
- patch applies a JSON Patch
- merge_patch applies a JSON Merge Patch
Version history
- Added in version 3.11.0.
- Added
out_of_range.411and stopped relying on an internal assertion when an "add" operation's target location has a non-object/non-array parent in version 3.13.0.