mirror of
https://github.com/nlohmann/json.git
synced 2026-11-12 15:10:47 +00:00
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>
2.5 KiB
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
end_pos- to access the end positionJSON_DIAGNOSTIC_POSITIONS- overview of the supported conversions- Parsing and Exceptions - handling parse errors and locating them in the input
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 ofJSON_DIAGNOSTICSwas wrong in the same way.