Files
json/docs/mkdocs/docs/api/basic_json/start_pos.md
T
Niels Lohmann 17e3de0fcc docs: add version-history notes for fixed start_pos and error positions (#6089)
Two bugs of 3.12.0 are fixed on develop without a note on the pages.
With JSON_DIAGNOSTIC_POSITIONS, start_pos() of a string that contains
escape sequences was too large; the position is now that of the opening
quote. A parse error for an unexpected number that is followed by a line
feed reported column 0 (for "1 2" and a line feed, line 1, column 0); for
"1", line feed, "2", line feed it now reports line 2, column 1.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
2026-11-12 08:40:06 +01:00

2.5 KiB

nlohmann::basic_json::start_pos

#if JSON_DIAGNOSTIC_POSITIONS
constexpr std::size_t start_pos() const noexcept;
#endif

Returns the position of the first character in the JSON string from which the value was parsed from.

JSON type return value
object position of the opening {
array position of the opening [
string position of the opening "
number position of the first character
boolean position of t for true and f for false
null position of n

Return value

the position of the first character of the value in the parsed JSON string, if the value was created by the parse function, or std::string::npos if the value was constructed otherwise

Exception safety

No-throw guarantee: this member function never throws exceptions.

Complexity

Constant.

Notes

!!! note "Note"

The function is only available if macro [`JSON_DIAGNOSTIC_POSITIONS`](../macros/json_diagnostic_positions.md) has
been defined to `#!cpp 1` before including the library header.

!!! warning "Invalidation"

The returned positions are only valid as long as the JSON value is not changed. The positions are *not* updated
when the JSON value is changed.

Examples

??? example "Example"

```cpp
--8<-- "examples/diagnostic_positions.cpp"
```

Output:

```
--8<-- "examples/diagnostic_positions.output"
```

The output shows the start/end positions of all the objects and fields in the JSON string.

See also

Version history

  • Added in version 3.12.0.
  • Fixed in version 3.13.0: in version 3.12.0, the start position of a string that contains escape sequences (for example #!cpp "\n" or #!cpp "\u00e4") was too large, by the number of bytes the escape sequences add to the source text. The position is now always that of the opening ". The "(bytes a-b)" range in the messages of JSON_DIAGNOSTICS was wrong in the same way.