From 412d82f6c71bd47f7c528d74addc6e35328bf580 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Sat, 10 Oct 2026 12:46:12 +0200 Subject: [PATCH] Document the one-character array index change Add 3.13.0 version-history entries to at, operator[], value, patch, patch_inplace, and unflatten, and describe in exceptions.md which array indices throw parse_error.109 and which out_of_range.404. Signed-off-by: Niels Lohmann --- docs/mkdocs/docs/api/basic_json/at.md | 4 +++- docs/mkdocs/docs/api/basic_json/operator[].md | 4 +++- docs/mkdocs/docs/api/basic_json/patch.md | 3 +++ docs/mkdocs/docs/api/basic_json/patch_inplace.md | 3 +++ docs/mkdocs/docs/api/basic_json/unflatten.md | 3 +++ docs/mkdocs/docs/api/basic_json/value.md | 4 +++- docs/mkdocs/docs/home/exceptions.md | 12 ++++++++++-- 7 files changed, 28 insertions(+), 5 deletions(-) diff --git a/docs/mkdocs/docs/api/basic_json/at.md b/docs/mkdocs/docs/api/basic_json/at.md index 18f108964..ad851c77e 100644 --- a/docs/mkdocs/docs/api/basic_json/at.md +++ b/docs/mkdocs/docs/api/basic_json/at.md @@ -241,4 +241,6 @@ Strong exception safety: if an exception occurs, the original value stays intact 3. Added in version 3.11.0. Fixed in version 3.13.0 to consistently accept `std::string_view`-convertible keys, as already supported by [`operator[]`](operator[].md), [`value`](value.md), [`find`](find.md), and other lookup functions. -4. Added in version 2.0.0. +4. Added in version 2.0.0. Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) instead of +[`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) for a one-character array index that is not +a digit (e.g., `/x`) in version 3.13.0, as it already did for longer ones. diff --git a/docs/mkdocs/docs/api/basic_json/operator[].md b/docs/mkdocs/docs/api/basic_json/operator[].md index 74996d629..f31d90072 100644 --- a/docs/mkdocs/docs/api/basic_json/operator[].md +++ b/docs/mkdocs/docs/api/basic_json/operator[].md @@ -286,4 +286,6 @@ Strong exception safety: if an exception occurs, the original value stays intact 3. Added in version 3.11.0. Fixed in version 3.13.0 to consistently accept `std::string_view`-convertible keys, as already supported by [`at`](at.md), [`value`](value.md), [`find`](find.md), and other lookup functions. 4. Added in version 2.0.0. A missing array index in the const version is guarded by a runtime assertion since - version 3.13.0. + version 3.13.0. Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) instead of +[`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) for a one-character array index that is not +a digit (e.g., `/x`) in version 3.13.0, as it already did for longer ones. diff --git a/docs/mkdocs/docs/api/basic_json/patch.md b/docs/mkdocs/docs/api/basic_json/patch.md index 8c2d7f231..951ee46e6 100644 --- a/docs/mkdocs/docs/api/basic_json/patch.md +++ b/docs/mkdocs/docs/api/basic_json/patch.md @@ -112,3 +112,6 @@ is thrown. In any case, the original value is not changed: the patch is applied location has a non-object/non-array parent in version 3.13.0. - Added [`out_of_range.414`](../../home/exceptions.md#jsonexceptionout_of_range414) and rejected a "move" operation whose "from" location is a proper prefix of its "path" location instead of silently producing a corrupted result in version 3.13.0. +- Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) instead of + [`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) for a one-character array index that is + not a digit (e.g., `/x`) in version 3.13.0, as it already did for longer ones. diff --git a/docs/mkdocs/docs/api/basic_json/patch_inplace.md b/docs/mkdocs/docs/api/basic_json/patch_inplace.md index 2d46a2cc8..dff8b095b 100644 --- a/docs/mkdocs/docs/api/basic_json/patch_inplace.md +++ b/docs/mkdocs/docs/api/basic_json/patch_inplace.md @@ -110,3 +110,6 @@ function throws an exception. location has a non-object/non-array parent in version 3.13.0. - Added [`out_of_range.414`](../../home/exceptions.md#jsonexceptionout_of_range414) and rejected a "move" operation whose "from" location is a proper prefix of its "path" location instead of silently producing a corrupted result in version 3.13.0. +- Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) instead of + [`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) for a one-character array index that is + not a digit (e.g., `/x`) in version 3.13.0, as it already did for longer ones. diff --git a/docs/mkdocs/docs/api/basic_json/unflatten.md b/docs/mkdocs/docs/api/basic_json/unflatten.md index 1e69cebcd..661ffa3e8 100644 --- a/docs/mkdocs/docs/api/basic_json/unflatten.md +++ b/docs/mkdocs/docs/api/basic_json/unflatten.md @@ -81,3 +81,6 @@ Apart from these two cases, for a JSON value `j`, the following is always true: - Added in version 2.0.0. - Made the array/object decision independent of the object's iteration order in version 3.13.0. +- Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) instead of + [`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) for a one-character array index that is + not a digit (e.g., `/x`) in version 3.13.0, as it already did for longer ones. diff --git a/docs/mkdocs/docs/api/basic_json/value.md b/docs/mkdocs/docs/api/basic_json/value.md index 80f5691dc..f8a1c5528 100644 --- a/docs/mkdocs/docs/api/basic_json/value.md +++ b/docs/mkdocs/docs/api/basic_json/value.md @@ -227,4 +227,6 @@ changes to any JSON value. [`operator[]`](operator[].md), [`at`](at.md), [`find`](find.md), and other lookup functions. 3. Added in version 2.0.2. Extended to work with arrays in version 3.13.0, including fixing an issue where resolving `ptr` through an array unexpectedly threw `out_of_range` instead of returning the resolved element (or - `default_value`, as documented). + `default_value`, as documented). Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) + instead of returning `default_value` for a one-character array index that is not a digit (e.g., `/x`) in version + 3.13.0, as it already did for longer ones. diff --git a/docs/mkdocs/docs/home/exceptions.md b/docs/mkdocs/docs/home/exceptions.md index d6fdce37a..32312334a 100644 --- a/docs/mkdocs/docs/home/exceptions.md +++ b/docs/mkdocs/docs/home/exceptions.md @@ -278,7 +278,9 @@ In a JSON Pointer, only `~0` and `~1` are valid escape sequences. ### json.exception.parse_error.109 -A JSON Pointer array index must be a number. +A JSON Pointer array index must be a number. This exception is thrown for an array index that does not begin with a +digit, except for `-` and the empty reference token, which throw [`out_of_range.404`](#jsonexceptionout_of_range404) +where they cannot be resolved. !!! failure "Example messages" @@ -289,6 +291,11 @@ A JSON Pointer array index must be a number. [json.exception.parse_error.109] parse error: array index '+1' is not a number ``` +!!! note + + Before version 3.13.0, a one-character array index that is not a digit (e.g., `x`) threw + [`out_of_range.404`](#jsonexceptionout_of_range404) instead. + ### json.exception.parse_error.110 When parsing a [binary format](../features/binary_formats/index.md), the byte vector ends before the complete value has @@ -871,7 +878,8 @@ The provided key was not found in the JSON object. ### json.exception.out_of_range.404 -A reference token in a JSON Pointer could not be resolved. +A reference token in a JSON Pointer could not be resolved, for instance an array index that begins with a digit but +contains other characters (e.g., `1a`), or `-` where it cannot be used. !!! failure "Example message"