mirror of
https://github.com/nlohmann/json.git
synced 2026-09-30 19:50:34 +00:00
Compare commits
74
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
289d61ef4f | ||
|
|
6a073dbae4 | ||
|
|
fdcc569eee | ||
|
|
6fc0d501f3 | ||
|
|
67435c9c7e | ||
|
|
2ea6d8c127 | ||
|
|
66877675b1 | ||
|
|
7fd6895788 | ||
|
|
6ae17630a4 | ||
|
|
5bd766aa50 | ||
|
|
4bb1b14b06 | ||
|
|
bfe0f32d71 | ||
|
|
44a88d85be | ||
|
|
5b11a0282c | ||
|
|
bfea6f36d3 | ||
|
|
e444a66276 | ||
|
|
1151826508 | ||
|
|
6218aa212b | ||
|
|
42f89e3130 | ||
|
|
6d7845d207 | ||
|
|
678fd3017b | ||
|
|
fc4c9c3446 | ||
|
|
68beba727c | ||
|
|
0050d0f7a4 | ||
|
|
6a8a7735ed | ||
|
|
65af260117 | ||
|
|
d268eaa693 | ||
|
|
5b9ffae8bb | ||
|
|
04f6ddd227 | ||
|
|
a2f45e7fbc | ||
|
|
29a647a08b | ||
|
|
8ee8bff661 | ||
|
|
8ead67cc30 | ||
|
|
aea2132069 | ||
|
|
526b6d3fd6 | ||
|
|
633de8e44b | ||
|
|
fc03b9912e | ||
|
|
9e1a09eec0 | ||
|
|
373005f7ac | ||
|
|
de6acd651e | ||
|
|
56ddcb65f0 | ||
|
|
509c07041f | ||
|
|
1e101ecac1 | ||
|
|
f682cd2ef1 | ||
|
|
6bd106893a | ||
|
|
98e00d22e5 | ||
|
|
f7972970a4 | ||
|
|
6178982b8d | ||
|
|
85f8b21e1c | ||
|
|
4fa95d9810 | ||
|
|
fe4a544c7e | ||
|
|
f422b753cc | ||
|
|
95e9a5931c | ||
|
|
1e44262091 | ||
|
|
c60a0bc336 | ||
|
|
d19f7f5dce | ||
|
|
632a5812a8 | ||
|
|
ec4bdc398a | ||
|
|
a9ab2a62ba | ||
|
|
ad2c14b985 | ||
|
|
e1310ad43c | ||
|
|
465407f3ce | ||
|
|
02dd3e67f2 | ||
|
|
abbe52d6de | ||
|
|
98278dc3f6 | ||
|
|
6c8ea0a6d1 | ||
|
|
01b53c8c15 | ||
|
|
cc472af13f | ||
|
|
80bf54a5a2 | ||
|
|
aada27405d | ||
|
|
3901b223e5 | ||
|
|
f290b36ad2 | ||
|
|
4daca40d7b | ||
|
|
7c90ec2323 |
@@ -142,6 +142,16 @@ The documentation will then be available at <http://127.0.0.1:8000/>. See the do
|
|||||||
[mkdocs](https://www.mkdocs.org) and [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) for more
|
[mkdocs](https://www.mkdocs.org) and [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/) for more
|
||||||
information.
|
information.
|
||||||
|
|
||||||
|
Before opening a pull request, check the documentation like the CI does:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
make build -C docs/mkdocs # strict build: fails on broken links, anchors, and structure problems
|
||||||
|
make check_mermaid -C docs/mkdocs # checks the Mermaid diagrams (requires Node.js)
|
||||||
|
```
|
||||||
|
|
||||||
|
A new API page also needs an entry in [`docs/docset/docSet.sql`](https://github.com/nlohmann/json/blob/develop/docs/docset/docSet.sql),
|
||||||
|
the search index of the docset; `make build` reports missing entries.
|
||||||
|
|
||||||
### Amalgamate the source code
|
### Amalgamate the source code
|
||||||
|
|
||||||
The single-header files
|
The single-header files
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
- [ ] The changes are described in detail, both the what and why.
|
- [ ] The changes are described in detail, both the what and why.
|
||||||
- [ ] If applicable, an [existing issue](https://github.com/nlohmann/json/issues) is referenced.
|
- [ ] If applicable, an [existing issue](https://github.com/nlohmann/json/issues) is referenced.
|
||||||
|
- [ ] If applicable, a fixed [OSS-Fuzz](https://issues.oss-fuzz.com) issue is referenced as `OSS-Fuzz: <id>` (see [fuzz testing](https://github.com/nlohmann/json/blob/develop/tests/fuzzing.md#handling-oss-fuzz-reports)).
|
||||||
- [ ] The [Code coverage](https://coveralls.io/github/nlohmann/json) remained at 100%. A test case for every new line of code.
|
- [ ] The [Code coverage](https://coveralls.io/github/nlohmann/json) remained at 100%. A test case for every new line of code.
|
||||||
- [ ] If applicable, the [documentation](https://json.nlohmann.me) is updated.
|
- [ ] If applicable, the [documentation](https://json.nlohmann.me) is updated.
|
||||||
- [ ] The source code is amalgamated by running `make amalgamate`.
|
- [ ] The source code is amalgamated by running `make amalgamate`.
|
||||||
|
|||||||
+14
-3
@@ -9,12 +9,23 @@ identified a security vulnerability in this repository, please use the GitHub Se
|
|||||||
Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other
|
Until it is published, this draft security advisory will only be visible to the maintainers of this project. Other
|
||||||
users and teams may be added once the advisory is created.
|
users and teams may be added once the advisory is created.
|
||||||
|
|
||||||
We will send a response indicating the next steps in handling your report. After the initial reply to your report, we
|
We will send a first response within 14 days, indicating the next steps in handling your report. After the initial
|
||||||
will keep you informed of the progress towards a fix and full announcement and may ask for additional information or
|
reply to your report, we will keep you informed of the progress towards a fix and full announcement and may ask for
|
||||||
guidance.
|
additional information or guidance.
|
||||||
|
|
||||||
For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.
|
For vulnerabilities in third-party dependencies or modules, please report them directly to the respective maintainers.
|
||||||
|
|
||||||
|
## Disclosure and credit
|
||||||
|
|
||||||
|
Once a fix is released, we publish the security advisory and list the fixed vulnerability in the release notes. We
|
||||||
|
credit the reporter in both, unless they ask not to be named.
|
||||||
|
|
||||||
|
## Supported versions
|
||||||
|
|
||||||
|
Security fixes are made on the `develop` branch and shipped with the next release. Only the latest release receives
|
||||||
|
security fixes; they are not backported to older releases. A release stops receiving security fixes when the next
|
||||||
|
release is published, so please update to the latest release to get them.
|
||||||
|
|
||||||
## Unofficial packages
|
## Unofficial packages
|
||||||
|
|
||||||
This project does not publish an official npm package. The npm package
|
This project does not publish an official npm package. The npm package
|
||||||
|
|||||||
@@ -18,6 +18,17 @@ updates:
|
|||||||
cooldown:
|
cooldown:
|
||||||
default-days: 7
|
default-days: 7
|
||||||
|
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: /docs/mkdocs/scripts/mermaid
|
||||||
|
schedule:
|
||||||
|
interval: daily
|
||||||
|
cooldown:
|
||||||
|
default-days: 7
|
||||||
|
ignore:
|
||||||
|
# Material for MkDocs loads mermaid@11; keep the checker on the same major version
|
||||||
|
- dependency-name: mermaid
|
||||||
|
update-types: ["version-update:semver-major"]
|
||||||
|
|
||||||
- package-ecosystem: pip
|
- package-ecosystem: pip
|
||||||
directory: /tools/astyle
|
directory: /tools/astyle
|
||||||
schedule:
|
schedule:
|
||||||
|
|||||||
+4
-4
@@ -37,13 +37,13 @@ labels:
|
|||||||
files:
|
files:
|
||||||
- "include/nlohmann/detail/input/binary_reader\\.hpp"
|
- "include/nlohmann/detail/input/binary_reader\\.hpp"
|
||||||
- "include/nlohmann/detail/output/binary_writer\\.hpp"
|
- "include/nlohmann/detail/output/binary_writer\\.hpp"
|
||||||
- "tests/src/unit-(bson|cbor|msgpack|ubjson|bjdata|binary_formats)"
|
- "tests/src/unit-(bson|cbor|msgpack|ubjson|bjdata|bon8|binary_formats)"
|
||||||
- "tests/src/fuzzer-parse_(bson|cbor|msgpack|ubjson|bjdata)"
|
- "tests/src/fuzzer-parse_(bson|cbor|msgpack|ubjson|bjdata|bon8)"
|
||||||
- "docs/mkdocs/docs/features/binary_formats/"
|
- "docs/mkdocs/docs/features/binary_formats/"
|
||||||
- "docs/mkdocs/docs/(api/basic_json|examples)/(to|from)_(bson|cbor|msgpack|ubjson|bjdata)"
|
- "docs/mkdocs/docs/(api/basic_json|examples)/(to|from)_(bson|cbor|msgpack|ubjson|bjdata|bon8)"
|
||||||
|
|
||||||
- label: "aspect: binary formats"
|
- label: "aspect: binary formats"
|
||||||
title: "(?i)(bson|cbor|msgpack|messagepack|ubjson|bjdata|binary format)"
|
title: "(?i)(bson|cbor|msgpack|messagepack|ubjson|bjdata|bon8|binary format)"
|
||||||
|
|
||||||
- label: "python"
|
- label: "python"
|
||||||
files:
|
files:
|
||||||
|
|||||||
@@ -3,6 +3,10 @@ name: "Check amalgamation"
|
|||||||
on:
|
on:
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
@@ -63,6 +67,7 @@ jobs:
|
|||||||
|
|
||||||
python3 $TOOL_DIR/amalgamate.py -c $TOOL_DIR/config_json.json -s .
|
python3 $TOOL_DIR/amalgamate.py -c $TOOL_DIR/config_json.json -s .
|
||||||
python3 $TOOL_DIR/amalgamate.py -c $TOOL_DIR/config_json_fwd.json -s .
|
python3 $TOOL_DIR/amalgamate.py -c $TOOL_DIR/config_json_fwd.json -s .
|
||||||
|
cp include/nlohmann/json_literals.hpp $INCLUDE_DIR/json_literals.hpp
|
||||||
|
|
||||||
# the header list of the Bazel "json" target must match the files in include/
|
# the header list of the Bazel "json" target must match the files in include/
|
||||||
cmake -P cmake/scripts/gen_bazel_build_file.cmake
|
cmake -P cmake/scripts/gen_bazel_build_file.cmake
|
||||||
|
|||||||
@@ -0,0 +1,46 @@
|
|||||||
|
name: Check documentation links
|
||||||
|
|
||||||
|
# check the links of the documentation weekly; external links break without any change in this repository
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '17 4 * * 1'
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check_docs_links:
|
||||||
|
if: github.repository == 'nlohmann/json'
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 30
|
||||||
|
steps:
|
||||||
|
- name: Harden Runner
|
||||||
|
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
||||||
|
with:
|
||||||
|
egress-policy: audit
|
||||||
|
|
||||||
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: Install virtual environment
|
||||||
|
run: make install_venv -C docs/mkdocs
|
||||||
|
|
||||||
|
- name: Check links
|
||||||
|
shell: bash # adds -o pipefail, so tee does not hide the exit code
|
||||||
|
run: make link_check -C docs/mkdocs 2>&1 | tee link_check.log
|
||||||
|
|
||||||
|
- name: Summarize broken links
|
||||||
|
if: failure()
|
||||||
|
run: |
|
||||||
|
{
|
||||||
|
echo '### Broken documentation links'
|
||||||
|
echo '```'
|
||||||
|
grep 'invalid url' link_check.log || true
|
||||||
|
echo '```'
|
||||||
|
} >> "$GITHUB_STEP_SUMMARY"
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
name: CIFuzz
|
name: CIFuzz
|
||||||
on: [pull_request]
|
on: [pull_request]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
|
|||||||
@@ -38,14 +38,14 @@ jobs:
|
|||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
uses: github/codeql-action/init@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
||||||
with:
|
with:
|
||||||
languages: c-cpp
|
languages: c-cpp
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
uses: github/codeql-action/autobuild@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
uses: github/codeql-action/analyze@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
||||||
|
|||||||
@@ -9,6 +9,10 @@
|
|||||||
name: 'Dependency Review'
|
name: 'Dependency Review'
|
||||||
on: [pull_request]
|
on: [pull_request]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,10 @@
|
|||||||
|
|
||||||
name: flawfinder
|
name: flawfinder
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
@@ -43,6 +47,6 @@ jobs:
|
|||||||
output: 'flawfinder_results.sarif'
|
output: 'flawfinder_results.sarif'
|
||||||
|
|
||||||
- name: Upload analysis results to GitHub Security tab
|
- name: Upload analysis results to GitHub Security tab
|
||||||
uses: github/codeql-action/upload-sarif@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
uses: github/codeql-action/upload-sarif@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
||||||
with:
|
with:
|
||||||
sarif_file: ${{github.workspace}}/flawfinder_results.sarif
|
sarif_file: ${{github.workspace}}/flawfinder_results.sarif
|
||||||
|
|||||||
@@ -4,6 +4,12 @@ on:
|
|||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [opened, synchronize]
|
types: [opened, synchronize]
|
||||||
|
|
||||||
|
# pull_request_target runs on the base branch, so github.ref would put all pull
|
||||||
|
# requests into one group; group by pull request number instead
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ jobs:
|
|||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
|
with:
|
||||||
|
# the git-revision-date-localized plugin needs the history for correct "last update" dates and so the
|
||||||
|
# strict build does not fail on a shallow clone
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
- name: Install virtual environment
|
- name: Install virtual environment
|
||||||
run: make install_venv -C docs/mkdocs
|
run: make install_venv -C docs/mkdocs
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ on:
|
|||||||
push:
|
push:
|
||||||
branches: ["develop"]
|
branches: ["develop"]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
@@ -76,6 +80,6 @@ jobs:
|
|||||||
|
|
||||||
# Upload the results to GitHub's code scanning dashboard.
|
# Upload the results to GitHub's code scanning dashboard.
|
||||||
- name: "Upload to code-scanning"
|
- name: "Upload to code-scanning"
|
||||||
uses: github/codeql-action/upload-sarif@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
uses: github/codeql-action/upload-sarif@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '23 2 * * 4'
|
- cron: '23 2 * * 4'
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref || github.run_id }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
@@ -61,7 +65,7 @@ jobs:
|
|||||||
|
|
||||||
# Upload SARIF file generated in previous step
|
# Upload SARIF file generated in previous step
|
||||||
- name: Upload SARIF file
|
- name: Upload SARIF file
|
||||||
uses: github/codeql-action/upload-sarif@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
uses: github/codeql-action/upload-sarif@1c5b675653bb5c22dbe9b12b556ec555138e09fd # v4.38.1
|
||||||
with:
|
with:
|
||||||
sarif_file: semgrep.sarif
|
sarif_file: semgrep.sarif
|
||||||
if: always()
|
if: always()
|
||||||
|
|||||||
@@ -389,7 +389,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
target: [ci_test_examples, ci_test_build_documentation]
|
target: [ci_test_examples, ci_test_build_documentation, ci_test_documentation_mermaid]
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1
|
||||||
@@ -399,6 +399,12 @@ jobs:
|
|||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
|
# the git-revision-date-localized plugin needs the history; a shallow clone makes the strict build fail
|
||||||
|
fetch-depth: ${{ matrix.target == 'ci_test_build_documentation' && '0' || '1' }}
|
||||||
|
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
||||||
|
if: matrix.target == 'ci_test_documentation_mermaid'
|
||||||
|
with:
|
||||||
|
node-version: 24
|
||||||
- name: Run CMake
|
- name: Run CMake
|
||||||
run: cmake -S . -B build -DJSON_CI=On
|
run: cmake -S . -B build -DJSON_CI=On
|
||||||
- name: Build
|
- name: Build
|
||||||
|
|||||||
@@ -124,11 +124,11 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
||||||
- name: Run CMake (Release)
|
- name: Run CMake (Release)
|
||||||
run: cmake -S . -B build -G "Visual Studio 17 2022" -A ARM64 -DJSON_BuildTests=On -DCMAKE_CXX_FLAGS="/W4 /WX"
|
run: cmake -S . -B build -G "Visual Studio 18 2026" -A ARM64 -DJSON_BuildTests=On -DCMAKE_CXX_FLAGS="/W4 /WX"
|
||||||
if: matrix.build_type == 'Release'
|
if: matrix.build_type == 'Release'
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
- name: Run CMake (Debug)
|
- name: Run CMake (Debug)
|
||||||
run: cmake -S . -B build -G "Visual Studio 17 2022" -A ARM64 -DJSON_BuildTests=On -DJSON_FastTests=ON -DCMAKE_CXX_FLAGS="/W4 /WX"
|
run: cmake -S . -B build -G "Visual Studio 18 2026" -A ARM64 -DJSON_BuildTests=On -DJSON_FastTests=ON -DCMAKE_CXX_FLAGS="/W4 /WX"
|
||||||
if: matrix.build_type == 'Debug'
|
if: matrix.build_type == 'Debug'
|
||||||
shell: pwsh
|
shell: pwsh
|
||||||
- name: Build
|
- name: Build
|
||||||
|
|||||||
@@ -28,6 +28,8 @@
|
|||||||
/docs/docset/docSet.dsidx
|
/docs/docset/docSet.dsidx
|
||||||
/docs/mkdocs/.cache/
|
/docs/mkdocs/.cache/
|
||||||
/docs/mkdocs/docs/__pycache__/
|
/docs/mkdocs/docs/__pycache__/
|
||||||
|
/docs/mkdocs/hooks/__pycache__/
|
||||||
|
/docs/mkdocs/scripts/mermaid/node_modules/
|
||||||
/docs/mkdocs/site/
|
/docs/mkdocs/site/
|
||||||
/docs/mkdocs/venv/
|
/docs/mkdocs/venv/
|
||||||
|
|
||||||
|
|||||||
+3
-1
@@ -21,6 +21,7 @@ cc_library(
|
|||||||
"include/nlohmann/adl_serializer.hpp",
|
"include/nlohmann/adl_serializer.hpp",
|
||||||
"include/nlohmann/byte_container_with_subtype.hpp",
|
"include/nlohmann/byte_container_with_subtype.hpp",
|
||||||
"include/nlohmann/detail/abi_macros.hpp",
|
"include/nlohmann/detail/abi_macros.hpp",
|
||||||
|
"include/nlohmann/detail/bit_ops.hpp",
|
||||||
"include/nlohmann/detail/conversions/from_json.hpp",
|
"include/nlohmann/detail/conversions/from_json.hpp",
|
||||||
"include/nlohmann/detail/conversions/to_chars.hpp",
|
"include/nlohmann/detail/conversions/to_chars.hpp",
|
||||||
"include/nlohmann/detail/conversions/to_json.hpp",
|
"include/nlohmann/detail/conversions/to_json.hpp",
|
||||||
@@ -33,6 +34,7 @@ cc_library(
|
|||||||
"include/nlohmann/detail/input/number_parse.hpp",
|
"include/nlohmann/detail/input/number_parse.hpp",
|
||||||
"include/nlohmann/detail/input/parser.hpp",
|
"include/nlohmann/detail/input/parser.hpp",
|
||||||
"include/nlohmann/detail/input/position_t.hpp",
|
"include/nlohmann/detail/input/position_t.hpp",
|
||||||
|
"include/nlohmann/detail/input/pow5_table.hpp",
|
||||||
"include/nlohmann/detail/input/string_scan.hpp",
|
"include/nlohmann/detail/input/string_scan.hpp",
|
||||||
"include/nlohmann/detail/iterators/internal_iterator.hpp",
|
"include/nlohmann/detail/iterators/internal_iterator.hpp",
|
||||||
"include/nlohmann/detail/iterators/iter_impl.hpp",
|
"include/nlohmann/detail/iterators/iter_impl.hpp",
|
||||||
@@ -65,13 +67,13 @@ cc_library(
|
|||||||
"include/nlohmann/detail/value_t.hpp",
|
"include/nlohmann/detail/value_t.hpp",
|
||||||
"include/nlohmann/json.hpp",
|
"include/nlohmann/json.hpp",
|
||||||
"include/nlohmann/json_fwd.hpp",
|
"include/nlohmann/json_fwd.hpp",
|
||||||
|
"include/nlohmann/json_literals.hpp",
|
||||||
"include/nlohmann/ordered_map.hpp",
|
"include/nlohmann/ordered_map.hpp",
|
||||||
"include/nlohmann/thirdparty/hedley/hedley.hpp",
|
"include/nlohmann/thirdparty/hedley/hedley.hpp",
|
||||||
"include/nlohmann/thirdparty/hedley/hedley_undef.hpp",
|
"include/nlohmann/thirdparty/hedley/hedley_undef.hpp",
|
||||||
],
|
],
|
||||||
includes = ["include"],
|
includes = ["include"],
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
alwayslink = True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
cc_library(
|
cc_library(
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ TESTS_SRCS=$(shell find tests -type f \( -name '*.hpp' -o -name '*.cpp' -o -name
|
|||||||
# the single headers (amalgamated from the source files)
|
# the single headers (amalgamated from the source files)
|
||||||
AMALGAMATED_FILE=single_include/nlohmann/json.hpp
|
AMALGAMATED_FILE=single_include/nlohmann/json.hpp
|
||||||
AMALGAMATED_FWD_FILE=single_include/nlohmann/json_fwd.hpp
|
AMALGAMATED_FWD_FILE=single_include/nlohmann/json_fwd.hpp
|
||||||
|
# json_literals.hpp only includes <nlohmann/json.hpp>, so it is copied verbatim
|
||||||
|
AMALGAMATED_LITERALS_FILE=single_include/nlohmann/json_literals.hpp
|
||||||
|
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
@@ -29,13 +31,14 @@ AMALGAMATED_FWD_FILE=single_include/nlohmann/json_fwd.hpp
|
|||||||
|
|
||||||
# main target
|
# main target
|
||||||
all:
|
all:
|
||||||
@echo "amalgamate - amalgamate files single_include/nlohmann/json{,_fwd}.hpp from the include/nlohmann sources"
|
@echo "amalgamate - amalgamate files single_include/nlohmann/json{,_fwd,_literals}.hpp from the include/nlohmann sources"
|
||||||
@echo "BUILD.bazel - regenerate the Bazel BUILD file from the include/nlohmann sources"
|
@echo "BUILD.bazel - regenerate the Bazel BUILD file from the include/nlohmann sources"
|
||||||
@echo "ChangeLog.md - generate ChangeLog file"
|
@echo "ChangeLog.md - generate ChangeLog file"
|
||||||
@echo "check-amalgamation - check whether sources have been amalgamated and BUILD.bazel is up to date"
|
@echo "check-amalgamation - check whether sources have been amalgamated and BUILD.bazel is up to date"
|
||||||
@echo "clean - remove built files"
|
@echo "clean - remove built files"
|
||||||
@echo "doctest - compile example files and check their output"
|
@echo "doctest - compile example files and check their output"
|
||||||
@echo "fuzz_testing - prepare fuzz testing of the JSON parser"
|
@echo "fuzz_testing - prepare fuzz testing of the JSON parser"
|
||||||
|
@echo "fuzz_testing_bon8 - prepare fuzz testing of the BON8 parser"
|
||||||
@echo "fuzz_testing_bson - prepare fuzz testing of the BSON parser"
|
@echo "fuzz_testing_bson - prepare fuzz testing of the BSON parser"
|
||||||
@echo "fuzz_testing_cbor - prepare fuzz testing of the CBOR parser"
|
@echo "fuzz_testing_cbor - prepare fuzz testing of the CBOR parser"
|
||||||
@echo "fuzz_testing_msgpack - prepare fuzz testing of the MessagePack parser"
|
@echo "fuzz_testing_msgpack - prepare fuzz testing of the MessagePack parser"
|
||||||
@@ -71,6 +74,14 @@ fuzz_testing:
|
|||||||
find tests/data/json_tests -size -5k -name *json | xargs -I{} cp "{}" fuzz-testing/testcases
|
find tests/data/json_tests -size -5k -name *json | xargs -I{} cp "{}" fuzz-testing/testcases
|
||||||
@echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer"
|
@echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer"
|
||||||
|
|
||||||
|
fuzz_testing_bon8:
|
||||||
|
rm -fr fuzz-testing
|
||||||
|
mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out
|
||||||
|
$(MAKE) parse_bon8_fuzzer -C tests CXX=afl-clang++
|
||||||
|
mv tests/parse_bon8_fuzzer fuzz-testing/fuzzer
|
||||||
|
find tests/data -size -5k -name *.bon8 | xargs -I{} cp "{}" fuzz-testing/testcases
|
||||||
|
@echo "Execute: afl-fuzz -i fuzz-testing/testcases -o fuzz-testing/out fuzz-testing/fuzzer"
|
||||||
|
|
||||||
fuzz_testing_bson:
|
fuzz_testing_bson:
|
||||||
rm -fr fuzz-testing
|
rm -fr fuzz-testing
|
||||||
mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out
|
mkdir -p fuzz-testing fuzz-testing/testcases fuzz-testing/out
|
||||||
@@ -145,14 +156,14 @@ install_astyle:
|
|||||||
|
|
||||||
# call the Artistic Style pretty printer on all source files
|
# call the Artistic Style pretty printer on all source files
|
||||||
pretty: install_astyle
|
pretty: install_astyle
|
||||||
$(ASTYLE) --project=tools/astyle/.astylerc $(SRCS) $(TESTS_SRCS) $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) docs/mkdocs/docs/examples/*.cpp
|
$(ASTYLE) --project=tools/astyle/.astylerc $(SRCS) $(TESTS_SRCS) $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_LITERALS_FILE) docs/mkdocs/docs/examples/*.cpp
|
||||||
|
|
||||||
# call the Clang-Format on all source files
|
# call the Clang-Format on all source files
|
||||||
pretty_format:
|
pretty_format:
|
||||||
for FILE in $(SRCS) $(TESTS_SRCS) $(AMALGAMATED_FILE) docs/mkdocs/docs/examples/*.cpp; do echo $$FILE; clang-format -i $$FILE; done
|
for FILE in $(SRCS) $(TESTS_SRCS) $(AMALGAMATED_FILE) docs/mkdocs/docs/examples/*.cpp; do echo $$FILE; clang-format -i $$FILE; done
|
||||||
|
|
||||||
# create single header files and pretty print
|
# create single header files and pretty print
|
||||||
amalgamate: $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE)
|
amalgamate: $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_LITERALS_FILE)
|
||||||
$(MAKE) pretty
|
$(MAKE) pretty
|
||||||
|
|
||||||
# call the amalgamation tool for json.hpp
|
# call the amalgamation tool for json.hpp
|
||||||
@@ -163,16 +174,23 @@ $(AMALGAMATED_FILE): $(SRCS)
|
|||||||
$(AMALGAMATED_FWD_FILE): $(SRCS)
|
$(AMALGAMATED_FWD_FILE): $(SRCS)
|
||||||
tools/amalgamate/amalgamate.py -c tools/amalgamate/config_json_fwd.json -s . --verbose=yes
|
tools/amalgamate/amalgamate.py -c tools/amalgamate/config_json_fwd.json -s . --verbose=yes
|
||||||
|
|
||||||
|
# copy json_literals.hpp
|
||||||
|
$(AMALGAMATED_LITERALS_FILE): include/nlohmann/json_literals.hpp
|
||||||
|
cp include/nlohmann/json_literals.hpp $(AMALGAMATED_LITERALS_FILE)
|
||||||
|
|
||||||
# check if file single_include/nlohmann/json.hpp has been amalgamated from the nlohmann sources
|
# check if file single_include/nlohmann/json.hpp has been amalgamated from the nlohmann sources
|
||||||
# Note: this target is called by Travis
|
# Note: this target is called by Travis
|
||||||
check-amalgamation:
|
check-amalgamation:
|
||||||
@mv $(AMALGAMATED_FILE) $(AMALGAMATED_FILE)~
|
@mv $(AMALGAMATED_FILE) $(AMALGAMATED_FILE)~
|
||||||
@mv $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_FWD_FILE)~
|
@mv $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_FWD_FILE)~
|
||||||
|
@mv $(AMALGAMATED_LITERALS_FILE) $(AMALGAMATED_LITERALS_FILE)~
|
||||||
@$(MAKE) amalgamate
|
@$(MAKE) amalgamate
|
||||||
@diff $(AMALGAMATED_FILE) $(AMALGAMATED_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_FILE)~ $(AMALGAMATED_FILE) ; false)
|
@diff $(AMALGAMATED_FILE) $(AMALGAMATED_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_FILE)~ $(AMALGAMATED_FILE) ; false)
|
||||||
@diff $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_FWD_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_FWD_FILE)~ $(AMALGAMATED_FWD_FILE) ; false)
|
@diff $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_FWD_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_FWD_FILE)~ $(AMALGAMATED_FWD_FILE) ; false)
|
||||||
|
@diff $(AMALGAMATED_LITERALS_FILE) $(AMALGAMATED_LITERALS_FILE)~ || (echo "===================================================================\n Amalgamation required! Please read the contribution guidelines\n in file .github/CONTRIBUTING.md.\n===================================================================" ; mv $(AMALGAMATED_LITERALS_FILE)~ $(AMALGAMATED_LITERALS_FILE) ; false)
|
||||||
@mv $(AMALGAMATED_FILE)~ $(AMALGAMATED_FILE)
|
@mv $(AMALGAMATED_FILE)~ $(AMALGAMATED_FILE)
|
||||||
@mv $(AMALGAMATED_FWD_FILE)~ $(AMALGAMATED_FWD_FILE)
|
@mv $(AMALGAMATED_FWD_FILE)~ $(AMALGAMATED_FWD_FILE)
|
||||||
|
@mv $(AMALGAMATED_LITERALS_FILE)~ $(AMALGAMATED_LITERALS_FILE)
|
||||||
@mv BUILD.bazel BUILD.bazel~
|
@mv BUILD.bazel BUILD.bazel~
|
||||||
@$(MAKE) BUILD.bazel
|
@$(MAKE) BUILD.bazel
|
||||||
@diff BUILD.bazel BUILD.bazel~ || (echo "===================================================================\n BUILD.bazel is out of date! Please run 'make BUILD.bazel'.\n===================================================================" ; mv BUILD.bazel~ BUILD.bazel ; false)
|
@diff BUILD.bazel BUILD.bazel~ || (echo "===================================================================\n BUILD.bazel is out of date! Please run 'make BUILD.bazel'.\n===================================================================" ; mv BUILD.bazel~ BUILD.bazel ; false)
|
||||||
@@ -213,7 +231,7 @@ json.tar.xz:
|
|||||||
# We use `-X` to make the resulting ZIP file reproducible, see
|
# We use `-X` to make the resulting ZIP file reproducible, see
|
||||||
# <https://content.pivotal.io/blog/barriers-to-deterministic-reproducible-zip-files>.
|
# <https://content.pivotal.io/blog/barriers-to-deterministic-reproducible-zip-files>.
|
||||||
include.zip: BUILD.bazel
|
include.zip: BUILD.bazel
|
||||||
zip -9 --recurse-paths -X include.zip $(SRCS) $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) BUILD.bazel MODULE.bazel meson.build LICENSE.MIT
|
zip -9 --recurse-paths -X include.zip $(SRCS) $(AMALGAMATED_FILE) $(AMALGAMATED_FWD_FILE) $(AMALGAMATED_LITERALS_FILE) BUILD.bazel MODULE.bazel meson.build LICENSE.MIT
|
||||||
|
|
||||||
# Create the files for a release and add signatures and hashes.
|
# Create the files for a release and add signatures and hashes.
|
||||||
release: include.zip json.tar.xz
|
release: include.zip json.tar.xz
|
||||||
@@ -222,10 +240,12 @@ release: include.zip json.tar.xz
|
|||||||
gpg --armor --detach-sig include.zip
|
gpg --armor --detach-sig include.zip
|
||||||
gpg --armor --detach-sig $(AMALGAMATED_FILE)
|
gpg --armor --detach-sig $(AMALGAMATED_FILE)
|
||||||
gpg --armor --detach-sig $(AMALGAMATED_FWD_FILE)
|
gpg --armor --detach-sig $(AMALGAMATED_FWD_FILE)
|
||||||
|
gpg --armor --detach-sig $(AMALGAMATED_LITERALS_FILE)
|
||||||
gpg --armor --detach-sig json.tar.xz
|
gpg --armor --detach-sig json.tar.xz
|
||||||
cp $(AMALGAMATED_FILE) release_files
|
cp $(AMALGAMATED_FILE) release_files
|
||||||
cp $(AMALGAMATED_FWD_FILE) release_files
|
cp $(AMALGAMATED_FWD_FILE) release_files
|
||||||
mv $(AMALGAMATED_FILE).asc $(AMALGAMATED_FWD_FILE).asc json.tar.xz json.tar.xz.asc include.zip include.zip.asc release_files
|
cp $(AMALGAMATED_LITERALS_FILE) release_files
|
||||||
|
mv $(AMALGAMATED_FILE).asc $(AMALGAMATED_FWD_FILE).asc $(AMALGAMATED_LITERALS_FILE).asc json.tar.xz json.tar.xz.asc include.zip include.zip.asc release_files
|
||||||
cd release_files ; shasum -a 256 json.hpp include.zip json.tar.xz > hashes.txt
|
cd release_files ; shasum -a 256 json.hpp include.zip json.tar.xz > hashes.txt
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,11 +13,10 @@
|
|||||||
[](https://json.nlohmann.me)
|
[](https://json.nlohmann.me)
|
||||||
[](https://raw.githubusercontent.com/nlohmann/json/develop/LICENSE.MIT)
|
[](https://raw.githubusercontent.com/nlohmann/json/develop/LICENSE.MIT)
|
||||||
[](https://github.com/nlohmann/json/releases)
|
[](https://github.com/nlohmann/json/releases)
|
||||||
[](https://repology.org/project/nlohmann-json/versions)
|
|
||||||
[](https://github.com/nlohmann/json/releases)
|
[](https://github.com/nlohmann/json/releases)
|
||||||
[](https://github.com/nlohmann/json/issues)
|
[](https://github.com/nlohmann/json/issues)
|
||||||
[](https://isitmaintained.com/project/nlohmann/json "Average time to resolve an issue")
|
[](https://isitmaintained.com/project/nlohmann/json "Average time to resolve an issue")
|
||||||
[](https://bestpractices.coreinfrastructure.org/projects/289)
|
[](https://www.bestpractices.dev/projects/289)
|
||||||
[](https://scorecard.dev/viewer/?uri=github.com/nlohmann/json)
|
[](https://scorecard.dev/viewer/?uri=github.com/nlohmann/json)
|
||||||
[](https://cloudback.it)
|
[](https://cloudback.it)
|
||||||
[](https://github.com/sponsors/nlohmann)
|
[](https://github.com/sponsors/nlohmann)
|
||||||
@@ -40,7 +39,7 @@
|
|||||||
- [Implicit conversions](#implicit-conversions)
|
- [Implicit conversions](#implicit-conversions)
|
||||||
- [Conversions to/from arbitrary types](#arbitrary-types-conversions)
|
- [Conversions to/from arbitrary types](#arbitrary-types-conversions)
|
||||||
- [Specializing enum conversion](#specializing-enum-conversion)
|
- [Specializing enum conversion](#specializing-enum-conversion)
|
||||||
- [Binary formats (BSON, CBOR, MessagePack, UBJSON, and BJData)](#binary-formats-bson-cbor-messagepack-ubjson-and-bjdata)
|
- [Binary formats (BSON, CBOR, MessagePack, UBJSON, BJData, and BON8)](#binary-formats-bson-cbor-messagepack-ubjson-bjdata-and-bon8)
|
||||||
- [Customers](#customers)
|
- [Customers](#customers)
|
||||||
- [Ecosystem](#ecosystem)
|
- [Ecosystem](#ecosystem)
|
||||||
- [Supported compilers](#supported-compilers)
|
- [Supported compilers](#supported-compilers)
|
||||||
@@ -63,7 +62,7 @@ There are myriads of [JSON](https://json.org) libraries out there, and each may
|
|||||||
|
|
||||||
- **Trivial integration**. Our whole code consists of a single header file [`json.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp). That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings. The library is also included in all popular [package managers](https://json.nlohmann.me/integration/package_managers/).
|
- **Trivial integration**. Our whole code consists of a single header file [`json.hpp`](https://github.com/nlohmann/json/blob/develop/single_include/nlohmann/json.hpp). That's it. No library, no subproject, no dependencies, no complex build system. The class is written in vanilla C++11. All in all, everything should require no adjustment of your compiler flags or project settings. The library is also included in all popular [package managers](https://json.nlohmann.me/integration/package_managers/).
|
||||||
|
|
||||||
- **Serious testing**. Our code is heavily [unit-tested](https://github.com/nlohmann/json/tree/develop/tests/src) and covers [100%](https://coveralls.io/r/nlohmann/json) of the code, including all exceptional behavior. Furthermore, we checked with [Valgrind](https://valgrind.org) and the [Clang Sanitizers](https://clang.llvm.org/docs/index.html) that there are no memory leaks. [Google OSS-Fuzz](https://github.com/google/oss-fuzz/tree/master/projects/json) additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the [Core Infrastructure Initiative (CII) best practices](https://bestpractices.coreinfrastructure.org/projects/289). See the [quality assurance](https://json.nlohmann.me/community/quality_assurance) overview documentation.
|
- **Serious testing**. Our code is heavily [unit-tested](https://github.com/nlohmann/json/tree/develop/tests/src) and covers [100%](https://coveralls.io/r/nlohmann/json) of the code, including all exceptional behavior. Furthermore, we checked with [Valgrind](https://valgrind.org) and the [Clang Sanitizers](https://clang.llvm.org/docs/index.html) that there are no memory leaks. [Google OSS-Fuzz](https://github.com/google/oss-fuzz/tree/master/projects/json) additionally runs fuzz tests against all parsers 24/7, effectively executing billions of tests so far. To maintain high quality, the project is following the [OpenSSF Best Practices](https://www.bestpractices.dev/projects/289). See the [quality assurance](https://json.nlohmann.me/community/quality_assurance) overview documentation.
|
||||||
|
|
||||||
Other aspects were not so important to us:
|
Other aspects were not so important to us:
|
||||||
|
|
||||||
@@ -128,7 +127,7 @@ There is also a [**docset**](https://github.com/Kapeli/Dash-User-Contributions/t
|
|||||||
- **JSON Pointer functions**: [flatten](https://json.nlohmann.me/api/basic_json/flatten), [unflatten](https://json.nlohmann.me/api/basic_json/unflatten)
|
- **JSON Pointer functions**: [flatten](https://json.nlohmann.me/api/basic_json/flatten), [unflatten](https://json.nlohmann.me/api/basic_json/unflatten)
|
||||||
- **JSON Patch functions**: [patch](https://json.nlohmann.me/api/basic_json/patch), [patch_inplace](https://json.nlohmann.me/api/basic_json/patch_inplace), [diff](https://json.nlohmann.me/api/basic_json/diff), [merge_patch](https://json.nlohmann.me/api/basic_json/merge_patch)
|
- **JSON Patch functions**: [patch](https://json.nlohmann.me/api/basic_json/patch), [patch_inplace](https://json.nlohmann.me/api/basic_json/patch_inplace), [diff](https://json.nlohmann.me/api/basic_json/diff), [merge_patch](https://json.nlohmann.me/api/basic_json/merge_patch)
|
||||||
- **Static functions**: [meta](https://json.nlohmann.me/api/basic_json/meta), [get_allocator](https://json.nlohmann.me/api/basic_json/get_allocator)
|
- **Static functions**: [meta](https://json.nlohmann.me/api/basic_json/meta), [get_allocator](https://json.nlohmann.me/api/basic_json/get_allocator)
|
||||||
- **Binary formats**: [from_bjdata](https://json.nlohmann.me/api/basic_json/from_bjdata), [from_bson](https://json.nlohmann.me/api/basic_json/from_bson), [from_cbor](https://json.nlohmann.me/api/basic_json/from_cbor), [from_msgpack](https://json.nlohmann.me/api/basic_json/from_msgpack), [from_ubjson](https://json.nlohmann.me/api/basic_json/from_ubjson), [to_bjdata](https://json.nlohmann.me/api/basic_json/to_bjdata), [to_bson](https://json.nlohmann.me/api/basic_json/to_bson), [to_cbor](https://json.nlohmann.me/api/basic_json/to_cbor), [to_msgpack](https://json.nlohmann.me/api/basic_json/to_msgpack), [to_ubjson](https://json.nlohmann.me/api/basic_json/to_ubjson)
|
- **Binary formats**: [from_bjdata](https://json.nlohmann.me/api/basic_json/from_bjdata), [from_bon8](https://json.nlohmann.me/api/basic_json/from_bon8), [from_bson](https://json.nlohmann.me/api/basic_json/from_bson), [from_cbor](https://json.nlohmann.me/api/basic_json/from_cbor), [from_msgpack](https://json.nlohmann.me/api/basic_json/from_msgpack), [from_ubjson](https://json.nlohmann.me/api/basic_json/from_ubjson), [to_bjdata](https://json.nlohmann.me/api/basic_json/to_bjdata), [to_bon8](https://json.nlohmann.me/api/basic_json/to_bon8), [to_bson](https://json.nlohmann.me/api/basic_json/to_bson), [to_cbor](https://json.nlohmann.me/api/basic_json/to_cbor), [to_msgpack](https://json.nlohmann.me/api/basic_json/to_msgpack), [to_ubjson](https://json.nlohmann.me/api/basic_json/to_ubjson)
|
||||||
- **Non-member functions**: [operator<<](https://json.nlohmann.me/api/operator_ltlt/), [operator>>](https://json.nlohmann.me/api/operator_gtgt/), [to_string](https://json.nlohmann.me/api/basic_json/to_string)
|
- **Non-member functions**: [operator<<](https://json.nlohmann.me/api/operator_ltlt/), [operator>>](https://json.nlohmann.me/api/operator_gtgt/), [to_string](https://json.nlohmann.me/api/basic_json/to_string)
|
||||||
- **Literals**: [operator""_json](https://json.nlohmann.me/api/operator_literal_json)
|
- **Literals**: [operator""_json](https://json.nlohmann.me/api/operator_literal_json)
|
||||||
- **Helper classes**: [std::hash<basic_json>](https://json.nlohmann.me/api/basic_json/std_hash), [std::swap<basic_json>](https://json.nlohmann.me/api/basic_json/std_swap)
|
- **Helper classes**: [std::hash<basic_json>](https://json.nlohmann.me/api/basic_json/std_hash), [std::swap<basic_json>](https://json.nlohmann.me/api/basic_json/std_swap)
|
||||||
@@ -1110,9 +1109,9 @@ Other Important points:
|
|||||||
- When using `get<ENUM_TYPE>()`, undefined JSON values will default to the first pair specified in your map. Select this default pair carefully. If you desire an exception in this circumstance use `NLOHMANN_JSON_SERIALIZE_ENUM_STRICT()` which behaves identically except for throwing an exception on unrecognized values.
|
- When using `get<ENUM_TYPE>()`, undefined JSON values will default to the first pair specified in your map. Select this default pair carefully. If you desire an exception in this circumstance use `NLOHMANN_JSON_SERIALIZE_ENUM_STRICT()` which behaves identically except for throwing an exception on unrecognized values.
|
||||||
- If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
|
- If an enum or JSON value is specified more than once in your map, the first matching occurrence from the top of the map will be returned when converting to or from JSON.
|
||||||
|
|
||||||
### Binary formats (BSON, CBOR, MessagePack, UBJSON, and BJData)
|
### Binary formats (BSON, CBOR, MessagePack, UBJSON, BJData, and BON8)
|
||||||
|
|
||||||
Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports [BSON](https://bsonspec.org) (Binary JSON), [CBOR](https://cbor.io) (Concise Binary Object Representation), [MessagePack](https://msgpack.org), [UBJSON](https://ubjson.org) (Universal Binary JSON Specification) and [BJData](https://neurojson.org/bjdata) (Binary JData) to efficiently encode JSON values to byte vectors and to decode such vectors.
|
Though JSON is a ubiquitous data format, it is not a very compact format suitable for data exchange, for instance over a network. Hence, the library supports [BSON](https://bsonspec.org) (Binary JSON), [CBOR](https://cbor.io) (Concise Binary Object Representation), [MessagePack](https://msgpack.org), [UBJSON](https://ubjson.org) (Universal Binary JSON Specification), [BJData](https://neurojson.org/bjdata) (Binary JData), and [BON8](https://github.com/hikoworks/hikogui/blob/main/docs/BON8.md) (Binary Object Notation 8) to efficiently encode JSON values to byte vectors and to decode such vectors.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
// create a JSON value
|
// create a JSON value
|
||||||
@@ -1149,6 +1148,14 @@ std::vector<std::uint8_t> v_ubjson = json::to_ubjson(j);
|
|||||||
|
|
||||||
// roundtrip
|
// roundtrip
|
||||||
json j_from_ubjson = json::from_ubjson(v_ubjson);
|
json j_from_ubjson = json::from_ubjson(v_ubjson);
|
||||||
|
|
||||||
|
// serialize to BON8
|
||||||
|
std::vector<std::uint8_t> v_bon8 = json::to_bon8(j);
|
||||||
|
|
||||||
|
// 0x88, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x63, 0x74, 0xF9, 0x73, 0x63, 0x68, 0x65, 0x6D, 0x61, 0x90
|
||||||
|
|
||||||
|
// roundtrip
|
||||||
|
json j_from_bon8 = json::from_bon8(v_bon8);
|
||||||
```
|
```
|
||||||
|
|
||||||
The library also supports binary types from BSON, CBOR (byte strings), and MessagePack (bin, ext, fixext). They are stored by default as `std::vector<std::uint8_t>` to be processed outside the library.
|
The library also supports binary types from BSON, CBOR (byte strings), and MessagePack (bin, ext, fixext). They are stored by default as `std::vector<std::uint8_t>` to be processed outside the library.
|
||||||
@@ -1387,6 +1394,7 @@ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR I
|
|||||||
- The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the [MIT License](https://opensource.org/licenses/MIT) (see above). Copyright © 2009 [Florian Loitsch](https://florian.loitsch.com/)
|
- The class contains a slightly modified version of the Grisu2 algorithm from Florian Loitsch which is licensed under the [MIT License](https://opensource.org/licenses/MIT) (see above). Copyright © 2009 [Florian Loitsch](https://florian.loitsch.com/)
|
||||||
- The class contains a copy of [Hedley](https://nemequ.github.io/hedley/) from Evan Nemerson which is licensed as [CC0-1.0](https://creativecommons.org/publicdomain/zero/1.0/).
|
- The class contains a copy of [Hedley](https://nemequ.github.io/hedley/) from Evan Nemerson which is licensed as [CC0-1.0](https://creativecommons.org/publicdomain/zero/1.0/).
|
||||||
- The class contains parts of [Google Abseil](https://github.com/abseil/abseil-cpp) which is licensed under the [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0).
|
- The class contains parts of [Google Abseil](https://github.com/abseil/abseil-cpp) which is licensed under the [Apache 2.0 License](https://opensource.org/licenses/Apache-2.0).
|
||||||
|
- The class contains an adapted version of the Eisel-Lemire algorithm and its table of powers of five from [fast_float](https://github.com/fastfloat/fast_float) by Daniel Lemire and contributors, which is available under the [MIT License](https://opensource.org/licenses/MIT) (used here), the Apache 2.0 License, and the Boost Software License. Copyright © 2021 The fast_float authors
|
||||||
|
|
||||||
<img align="right" src="https://git.fsfe.org/reuse/reuse-ci/raw/branch/master/reuse-horizontal.png" alt="REUSE Software">
|
<img align="right" src="https://git.fsfe.org/reuse/reuse-ci/raw/branch/master/reuse-horizontal.png" alt="REUSE Software">
|
||||||
|
|
||||||
|
|||||||
+16
-7
@@ -300,10 +300,10 @@ add_custom_target(ci_test_skiplibraryversioncheck
|
|||||||
# Disable thread-local storage.
|
# Disable thread-local storage.
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
# Without thread-local storage, the copy constructor cannot bound its descent
|
# Without thread-local storage, copying and comparing cannot bound their
|
||||||
# and copies every object and array without the call stack. That path is
|
# descent and handle every object and array without the call stack. Those paths
|
||||||
# otherwise only reached by values nested deeper than the bound, so this target
|
# are otherwise only reached by values nested deeper than the bound, so this
|
||||||
# is what runs the whole test suite through it.
|
# target is what runs the whole test suite through them.
|
||||||
add_custom_target(ci_test_no_thread_local
|
add_custom_target(ci_test_no_thread_local
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
-DCMAKE_BUILD_TYPE=Debug -GNinja
|
-DCMAKE_BUILD_TYPE=Debug -GNinja
|
||||||
@@ -373,9 +373,10 @@ file(GLOB_RECURSE INDENT_FILES
|
|||||||
set(include_dir ${PROJECT_SOURCE_DIR}/single_include/nlohmann)
|
set(include_dir ${PROJECT_SOURCE_DIR}/single_include/nlohmann)
|
||||||
set(tool_dir ${PROJECT_SOURCE_DIR}/tools/amalgamate)
|
set(tool_dir ${PROJECT_SOURCE_DIR}/tools/amalgamate)
|
||||||
add_custom_target(ci_test_amalgamation
|
add_custom_target(ci_test_amalgamation
|
||||||
COMMAND rm -fr ${include_dir}/json.hpp~ ${include_dir}/json_fwd.hpp~
|
COMMAND rm -fr ${include_dir}/json.hpp~ ${include_dir}/json_fwd.hpp~ ${include_dir}/json_literals.hpp~
|
||||||
COMMAND cp ${include_dir}/json.hpp ${include_dir}/json.hpp~
|
COMMAND cp ${include_dir}/json.hpp ${include_dir}/json.hpp~
|
||||||
COMMAND cp ${include_dir}/json_fwd.hpp ${include_dir}/json_fwd.hpp~
|
COMMAND cp ${include_dir}/json_fwd.hpp ${include_dir}/json_fwd.hpp~
|
||||||
|
COMMAND cp ${include_dir}/json_literals.hpp ${include_dir}/json_literals.hpp~
|
||||||
|
|
||||||
COMMAND ${Python3_EXECUTABLE} -mvenv venv_astyle
|
COMMAND ${Python3_EXECUTABLE} -mvenv venv_astyle
|
||||||
COMMAND venv_astyle/bin/pip3 --quiet install -r ${CMAKE_SOURCE_DIR}/tools/astyle/requirements.txt
|
COMMAND venv_astyle/bin/pip3 --quiet install -r ${CMAKE_SOURCE_DIR}/tools/astyle/requirements.txt
|
||||||
@@ -383,10 +384,12 @@ add_custom_target(ci_test_amalgamation
|
|||||||
|
|
||||||
COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json.json -s .
|
COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json.json -s .
|
||||||
COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json_fwd.json -s .
|
COMMAND ${Python3_EXECUTABLE} ${tool_dir}/amalgamate.py -c ${tool_dir}/config_json_fwd.json -s .
|
||||||
|
COMMAND cp ${PROJECT_SOURCE_DIR}/include/nlohmann/json_literals.hpp ${include_dir}/json_literals.hpp
|
||||||
COMMAND venv_astyle/bin/astyle --project=tools/astyle/.astylerc --suffix=none ${include_dir}/json.hpp ${include_dir}/json_fwd.hpp
|
COMMAND venv_astyle/bin/astyle --project=tools/astyle/.astylerc --suffix=none ${include_dir}/json.hpp ${include_dir}/json_fwd.hpp
|
||||||
|
|
||||||
COMMAND diff ${include_dir}/json.hpp~ ${include_dir}/json.hpp
|
COMMAND diff ${include_dir}/json.hpp~ ${include_dir}/json.hpp
|
||||||
COMMAND diff ${include_dir}/json_fwd.hpp~ ${include_dir}/json_fwd.hpp
|
COMMAND diff ${include_dir}/json_fwd.hpp~ ${include_dir}/json_fwd.hpp
|
||||||
|
COMMAND diff ${include_dir}/json_literals.hpp~ ${include_dir}/json_literals.hpp
|
||||||
|
|
||||||
COMMAND venv_astyle/bin/astyle --project=tools/astyle/.astylerc --suffix=orig ${INDENT_FILES}
|
COMMAND venv_astyle/bin/astyle --project=tools/astyle/.astylerc --suffix=orig ${INDENT_FILES}
|
||||||
COMMAND for FILE in `find . -name '*.orig'`\; do false \; done
|
COMMAND for FILE in `find . -name '*.orig'`\; do false \; done
|
||||||
@@ -542,7 +545,7 @@ add_custom_target(ci_infer
|
|||||||
|
|
||||||
add_custom_target(ci_offline_testdata
|
add_custom_target(ci_offline_testdata
|
||||||
COMMAND mkdir -p ${PROJECT_BINARY_DIR}/build_offline_testdata/test_data
|
COMMAND mkdir -p ${PROJECT_BINARY_DIR}/build_offline_testdata/test_data
|
||||||
COMMAND cd ${PROJECT_BINARY_DIR}/build_offline_testdata/test_data && ${GIT_TOOL} clone -c advice.detachedHead=false --branch v3.1.0 https://github.com/nlohmann/json_test_data.git --quiet --depth 1
|
COMMAND cd ${PROJECT_BINARY_DIR}/build_offline_testdata/test_data && ${GIT_TOOL} clone -c advice.detachedHead=false --branch v3.2.0 https://github.com/nlohmann/json_test_data.git --quiet --depth 1
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
-DCMAKE_BUILD_TYPE=Debug -GNinja
|
-DCMAKE_BUILD_TYPE=Debug -GNinja
|
||||||
-DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_TestDataDirectory=${PROJECT_BINARY_DIR}/build_offline_testdata/test_data/json_test_data
|
-DJSON_BuildTests=ON -DJSON_FastTests=ON -DJSON_TestDataDirectory=${PROJECT_BINARY_DIR}/build_offline_testdata/test_data/json_test_data
|
||||||
@@ -619,7 +622,7 @@ add_custom_target(ci_single_binaries
|
|||||||
add_custom_target(ci_benchmarks
|
add_custom_target(ci_benchmarks
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
-DCMAKE_BUILD_TYPE=Release -GNinja
|
-DCMAKE_BUILD_TYPE=Release -GNinja
|
||||||
-S${PROJECT_SOURCE_DIR}/benchmarks -B${PROJECT_BINARY_DIR}/build_benchmarks
|
-S${PROJECT_SOURCE_DIR}/tests/benchmarks -B${PROJECT_BINARY_DIR}/build_benchmarks
|
||||||
COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_benchmarks --target json_benchmarks
|
COMMAND ${CMAKE_COMMAND} --build ${PROJECT_BINARY_DIR}/build_benchmarks --target json_benchmarks
|
||||||
COMMAND cd ${PROJECT_BINARY_DIR}/build_benchmarks && ./json_benchmarks
|
COMMAND cd ${PROJECT_BINARY_DIR}/build_benchmarks && ./json_benchmarks
|
||||||
COMMENT "Run benchmarks"
|
COMMENT "Run benchmarks"
|
||||||
@@ -849,6 +852,12 @@ add_custom_target(ci_test_build_documentation
|
|||||||
COMMENT "Build the documentation"
|
COMMENT "Build the documentation"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_custom_target(ci_test_documentation_mermaid
|
||||||
|
COMMAND make check_mermaid
|
||||||
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/docs/mkdocs
|
||||||
|
COMMENT "Check the Mermaid diagrams of the documentation"
|
||||||
|
)
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Clean up all generated files.
|
# Clean up all generated files.
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
set(JSON_TEST_DATA_URL https://github.com/nlohmann/json_test_data)
|
set(JSON_TEST_DATA_URL https://github.com/nlohmann/json_test_data)
|
||||||
set(JSON_TEST_DATA_VERSION 3.1.0)
|
set(JSON_TEST_DATA_VERSION 3.2.0)
|
||||||
|
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ if(CMAKE_CROSSCOMPILING)
|
|||||||
endif()
|
endif()
|
||||||
if(NOT DEFINED LIBCPP_VERSION_OUTPUT_CACHED)
|
if(NOT DEFINED LIBCPP_VERSION_OUTPUT_CACHED)
|
||||||
try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
|
try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
|
||||||
"${CMAKE_BINARY_DIR}" SOURCES "${CMAKE_SOURCE_DIR}/cmake/detect_libcpp_version.cpp"
|
"${CMAKE_BINARY_DIR}" SOURCES "${CMAKE_CURRENT_LIST_DIR}/detect_libcpp_version.cpp"
|
||||||
RUN_OUTPUT_VARIABLE LIBCPP_VERSION_OUTPUT
|
RUN_OUTPUT_VARIABLE LIBCPP_VERSION_OUTPUT
|
||||||
COMPILE_OUTPUT_VARIABLE LIBCPP_VERSION_COMPILE_OUTPUT
|
COMPILE_OUTPUT_VARIABLE LIBCPP_VERSION_COMPILE_OUTPUT
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ string(APPEND CONTENT [=[
|
|||||||
],
|
],
|
||||||
includes = ["include"],
|
includes = ["include"],
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
alwayslink = True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
cc_library(
|
cc_library(
|
||||||
|
|||||||
+3
-2
@@ -35,9 +35,10 @@ create_output: $(EXAMPLES:.cpp=.output)
|
|||||||
# check output of all stand-alone example files
|
# check output of all stand-alone example files
|
||||||
check_output: $(EXAMPLES:.cpp=.test)
|
check_output: $(EXAMPLES:.cpp=.test)
|
||||||
|
|
||||||
# check output of all stand-alone example files (exclude files with platform-dependent output.)
|
# check output of all stand-alone example files (exclude files whose output depends on the platform by nature:
|
||||||
|
# library and compiler information, container size limits, and hash values)
|
||||||
# This target is used in the CI (ci_test_documentation).
|
# This target is used in the CI (ci_test_documentation).
|
||||||
check_output_portable: $(filter-out mkdocs/docs/examples/meta.test mkdocs/docs/examples/max_size.test mkdocs/docs/examples/std_hash.test mkdocs/docs/examples/basic_json__CompatibleType.test,$(EXAMPLES:.cpp=.test))
|
check_output_portable: $(filter-out mkdocs/docs/examples/meta.test mkdocs/docs/examples/max_size.test mkdocs/docs/examples/std_hash.test,$(EXAMPLES:.cpp=.test))
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -fr $(EXAMPLES:.cpp=)
|
rm -fr $(EXAMPLES:.cpp=)
|
||||||
|
|||||||
@@ -10,9 +10,12 @@ INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype',
|
|||||||
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::byte_container_with_subtype', 'Constructor', 'api/byte_container_with_subtype/byte_container_with_subtype/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::byte_container_with_subtype', 'Constructor', 'api/byte_container_with_subtype/byte_container_with_subtype/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::clear_subtype', 'Method', 'api/byte_container_with_subtype/clear_subtype/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::clear_subtype', 'Method', 'api/byte_container_with_subtype/clear_subtype/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::has_subtype', 'Method', 'api/byte_container_with_subtype/has_subtype/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::has_subtype', 'Method', 'api/byte_container_with_subtype/has_subtype/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::operator!=', 'Operator', 'api/byte_container_with_subtype/operator_ne/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::operator==', 'Operator', 'api/byte_container_with_subtype/operator_eq/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::set_subtype', 'Method', 'api/byte_container_with_subtype/set_subtype/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::set_subtype', 'Method', 'api/byte_container_with_subtype/set_subtype/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::subtype', 'Method', 'api/byte_container_with_subtype/subtype/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('byte_container_with_subtype::subtype', 'Method', 'api/byte_container_with_subtype/subtype/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json', 'Class', 'api/basic_json/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json', 'Class', 'api/basic_json/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('format_as', 'Function', 'api/basic_json/format_as/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::accept', 'Function', 'api/basic_json/accept/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::accept', 'Function', 'api/basic_json/accept/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::array', 'Function', 'api/basic_json/array/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::array', 'Function', 'api/basic_json/array/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::array_t', 'Type', 'api/basic_json/array_t/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::array_t', 'Type', 'api/basic_json/array_t/index.html');
|
||||||
@@ -48,6 +51,7 @@ INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_bjdata', 'Fu
|
|||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_bson', 'Function', 'api/basic_json/from_bson/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_bson', 'Function', 'api/basic_json/from_bson/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_cbor', 'Function', 'api/basic_json/from_cbor/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_cbor', 'Function', 'api/basic_json/from_cbor/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_msgpack', 'Function', 'api/basic_json/from_msgpack/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_msgpack', 'Function', 'api/basic_json/from_msgpack/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_bon8', 'Function', 'api/basic_json/from_bon8/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_ubjson', 'Function', 'api/basic_json/from_ubjson/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::from_ubjson', 'Function', 'api/basic_json/from_ubjson/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::front', 'Method', 'api/basic_json/front/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::front', 'Method', 'api/basic_json/front/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::get', 'Method', 'api/basic_json/get/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::get', 'Method', 'api/basic_json/get/index.html');
|
||||||
@@ -121,6 +125,7 @@ INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_bjdata', 'Func
|
|||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_bson', 'Function', 'api/basic_json/to_bson/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_bson', 'Function', 'api/basic_json/to_bson/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_cbor', 'Function', 'api/basic_json/to_cbor/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_cbor', 'Function', 'api/basic_json/to_cbor/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_msgpack', 'Function', 'api/basic_json/to_msgpack/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_msgpack', 'Function', 'api/basic_json/to_msgpack/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_bon8', 'Function', 'api/basic_json/to_bon8/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_string', 'Method', 'api/basic_json/to_string/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_string', 'Method', 'api/basic_json/to_string/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_ubjson', 'Function', 'api/basic_json/to_ubjson/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::to_ubjson', 'Function', 'api/basic_json/to_ubjson/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::value', 'Method', 'api/basic_json/value/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('basic_json::value', 'Method', 'api/basic_json/value/index.html');
|
||||||
@@ -130,15 +135,19 @@ INSERT INTO searchIndex(name, type, path) VALUES ('json', 'Class', 'api/json/ind
|
|||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer', 'Class', 'api/json_pointer/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer', 'Class', 'api/json_pointer/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::back', 'Method', 'api/json_pointer/back/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::back', 'Method', 'api/json_pointer/back/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::empty', 'Method', 'api/json_pointer/empty/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::empty', 'Method', 'api/json_pointer/empty/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::front', 'Method', 'api/json_pointer/front/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::json_pointer', 'Constructor', 'api/json_pointer/json_pointer/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::json_pointer', 'Constructor', 'api/json_pointer/json_pointer/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator==', 'Operator', 'api/json_pointer/operator_eq/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator==', 'Operator', 'api/json_pointer/operator_eq/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator!=', 'Operator', 'api/json_pointer/operator_ne/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator!=', 'Operator', 'api/json_pointer/operator_ne/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator/', 'Operator', 'api/json_pointer/operator_slash/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator/', 'Operator', 'api/json_pointer/operator_slash/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator/=', 'Operator', 'api/json_pointer/operator_slasheq/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator/=', 'Operator', 'api/json_pointer/operator_slasheq/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator string_t', 'Operator', 'api/json_pointer/operator_string_t/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator string_t', 'Operator', 'api/json_pointer/operator_string_t/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::operator<=>', 'Operator', 'api/json_pointer/operator_spaceship/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::parent_pointer', 'Method', 'api/json_pointer/parent_pointer/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::parent_pointer', 'Method', 'api/json_pointer/parent_pointer/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::pop_back', 'Method', 'api/json_pointer/pop_back/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::pop_back', 'Method', 'api/json_pointer/pop_back/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::pop_front', 'Method', 'api/json_pointer/pop_front/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::push_back', 'Method', 'api/json_pointer/push_back/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::push_back', 'Method', 'api/json_pointer/push_back/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::push_front', 'Method', 'api/json_pointer/push_front/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::string_t', 'Type', 'api/json_pointer/string_t/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::string_t', 'Type', 'api/json_pointer/string_t/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::to_string', 'Method', 'api/json_pointer/to_string/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_pointer::to_string', 'Method', 'api/json_pointer/to_string/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('json_sax', 'Class', 'api/json_sax/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('json_sax', 'Class', 'api/json_sax/index.html');
|
||||||
@@ -161,6 +170,7 @@ INSERT INTO searchIndex(name, type, path) VALUES ('operator<<', 'Operator', 'api
|
|||||||
INSERT INTO searchIndex(name, type, path) VALUES ('operator>>', 'Operator', 'api/operator_gtgt/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('operator>>', 'Operator', 'api/operator_gtgt/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('ordered_json', 'Class', 'api/ordered_json/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('ordered_json', 'Class', 'api/ordered_json/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('ordered_map', 'Class', 'api/ordered_map/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('ordered_map', 'Class', 'api/ordered_map/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('std::formatter<basic_json>', 'Class', 'api/basic_json/std_formatter/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('std::hash<basic_json>', 'Class', 'api/basic_json/std_hash/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('std::hash<basic_json>', 'Class', 'api/basic_json/std_hash/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('std::swap<basic_json>', 'Function', 'api/basic_json/std_swap/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('std::swap<basic_json>', 'Function', 'api/basic_json/std_swap/index.html');
|
||||||
|
|
||||||
@@ -171,6 +181,7 @@ INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: BJData', 'Gui
|
|||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: BSON', 'Guide', 'features/binary_formats/bson/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: BSON', 'Guide', 'features/binary_formats/bson/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: CBOR', 'Guide', 'features/binary_formats/cbor/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: CBOR', 'Guide', 'features/binary_formats/cbor/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: MessagePack', 'Guide', 'features/binary_formats/messagepack/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: MessagePack', 'Guide', 'features/binary_formats/messagepack/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: BON8', 'Guide', 'features/binary_formats/bon8/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: UBJSON', 'Guide', 'features/binary_formats/ubjson/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Formats: UBJSON', 'Guide', 'features/binary_formats/ubjson/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Values', 'Guide', 'features/binary_values/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Binary Values', 'Guide', 'features/binary_values/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Comments', 'Guide', 'features/comments/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Comments', 'Guide', 'features/comments/index.html');
|
||||||
@@ -192,17 +203,20 @@ INSERT INTO searchIndex(name, type, path) VALUES ('nlohmann Namespace', 'Guide',
|
|||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Types', 'Guide', 'features/types/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Types', 'Guide', 'features/types/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Types: Number Handling', 'Guide', 'features/types/number_handling/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Types: Number Handling', 'Guide', 'features/types/number_handling/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Object Order', 'Guide', 'features/object_order/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Object Order', 'Guide', 'features/object_order/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('Performance', 'Guide', 'features/performance/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing', 'Guide', 'features/parsing/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing', 'Guide', 'features/parsing/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: JSON Lines', 'Guide', 'features/parsing/json_lines/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: JSON Lines', 'Guide', 'features/parsing/json_lines/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: Parser Callbacks', 'Guide', 'features/parsing/parser_callbacks/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: Parser Callbacks', 'Guide', 'features/parsing/parser_callbacks/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: Parsing and Exceptions', 'Guide', 'features/parsing/parse_exceptions/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: Parsing and Exceptions', 'Guide', 'features/parsing/parse_exceptions/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: SAX Interface', 'Guide', 'features/parsing/sax_interface/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: SAX Interface', 'Guide', 'features/parsing/sax_interface/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('Parsing: Untrusted Input', 'Guide', 'features/parsing/untrusted_input/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Runtime Assertions', 'Guide', 'features/assertions/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Runtime Assertions', 'Guide', 'features/assertions/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Specializing enum conversion', 'Guide', 'features/enum_conversion/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Specializing enum conversion', 'Guide', 'features/enum_conversion/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Supported Macros', 'Guide', 'features/macros/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Supported Macros', 'Guide', 'features/macros/index.html');
|
||||||
|
|
||||||
-- Macros
|
-- Macros
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_ASSERT', 'Macro', 'api/macros/json_assert/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_ASSERT', 'Macro', 'api/macros/json_assert/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_BRACE_INIT_COPY_SEMANTICS', 'Macro', 'api/macros/json_brace_init_copy_semantics/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_CATCH_USER', 'Macro', 'api/macros/json_throw_user/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_CATCH_USER', 'Macro', 'api/macros/json_throw_user/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_DIAGNOSTICS', 'Macro', 'api/macros/json_diagnostics/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_DIAGNOSTICS', 'Macro', 'api/macros/json_diagnostics/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_DIAGNOSTIC_POSITIONS', 'Macro', 'api/macros/json_diagnostic_positions/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_DIAGNOSTIC_POSITIONS', 'Macro', 'api/macros/json_diagnostic_positions/index.html');
|
||||||
@@ -211,34 +225,59 @@ INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_11', 'Macro', 'a
|
|||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_14', 'Macro', 'api/macros/json_has_cpp_11/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_14', 'Macro', 'api/macros/json_has_cpp_11/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_17', 'Macro', 'api/macros/json_has_cpp_11/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_17', 'Macro', 'api/macros/json_has_cpp_11/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_20', 'Macro', 'api/macros/json_has_cpp_11/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_20', 'Macro', 'api/macros/json_has_cpp_11/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_23', 'Macro', 'api/macros/json_has_cpp_11/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_CPP_26', 'Macro', 'api/macros/json_has_cpp_11/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_EXPERIMENTAL_FILESYSTEM', 'Macro', 'api/macros/json_has_filesystem/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_EXPERIMENTAL_FILESYSTEM', 'Macro', 'api/macros/json_has_filesystem/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_FILESYSTEM', 'Macro', 'api/macros/json_has_filesystem/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_FILESYSTEM', 'Macro', 'api/macros/json_has_filesystem/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_RANGES', 'Macro', 'api/macros/json_has_ranges/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_RANGES', 'Macro', 'api/macros/json_has_ranges/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_STATIC_RTTI', 'Macro', 'api/macros/json_has_static_rtti/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_STATIC_RTTI', 'Macro', 'api/macros/json_has_static_rtti/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_STD_FORMAT', 'Macro', 'api/macros/json_has_std_format/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_THREE_WAY_COMPARISON', 'Macro', 'api/macros/json_has_three_way_comparison/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_HAS_THREE_WAY_COMPARISON', 'Macro', 'api/macros/json_has_three_way_comparison/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_NOEXCEPTION', 'Macro', 'api/macros/json_noexception/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_NOEXCEPTION', 'Macro', 'api/macros/json_noexception/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_NO_AUTOMATIC_UDLS', 'Macro', 'api/macros/json_no_automatic_udls/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_NO_IO', 'Macro', 'api/macros/json_no_io/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_NO_IO', 'Macro', 'api/macros/json_no_io/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_NO_THREAD_LOCAL', 'Macro', 'api/macros/json_no_thread_local/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_PRECISE_STREAM_POSITION', 'Macro', 'api/macros/json_precise_stream_position/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_SKIP_LIBRARY_VERSION_CHECK', 'Macro', 'api/macros/json_skip_library_version_check/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_SKIP_LIBRARY_VERSION_CHECK', 'Macro', 'api/macros/json_skip_library_version_check/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_SKIP_UNSUPPORTED_COMPILER_CHECK', 'Macro', 'api/macros/json_skip_unsupported_compiler_check/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_SKIP_UNSUPPORTED_COMPILER_CHECK', 'Macro', 'api/macros/json_skip_unsupported_compiler_check/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_STRICT_NUL_HANDLING', 'Macro', 'api/macros/json_strict_nul_handling/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_THROW_USER', 'Macro', 'api/macros/json_throw_user/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_THROW_USER', 'Macro', 'api/macros/json_throw_user/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_TRY_USER', 'Macro', 'api/macros/json_throw_user/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_TRY_USER', 'Macro', 'api/macros/json_throw_user/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_GLOBAL_UDLS', 'Macro', 'api/macros/json_use_global_udls/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_GLOBAL_UDLS', 'Macro', 'api/macros/json_use_global_udls/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_IMPLICIT_CONVERSIONS', 'Macro', 'api/macros/json_use_implicit_conversions/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_IMPLICIT_CONVERSIONS', 'Macro', 'api/macros/json_use_implicit_conversions/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON', 'Macro', 'api/macros/json_use_legacy_discarded_value_comparison/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON', 'Macro', 'api/macros/json_use_legacy_discarded_value_comparison/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('JSON_USE_SIMDUTF', 'Macro', 'api/macros/json_use_simdutf/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('Macros', 'Macro', 'api/macros/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('Macros', 'Macro', 'api/macros/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_derived_type/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_type_intrusive/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_type_intrusive/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE', 'Macro', 'api/macros/nlohmann_define_type_intrusive/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_type_intrusive/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_type_intrusive/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_type_non_intrusive/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE', 'Macro', 'api/macros/nlohmann_define_type_non_intrusive/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE', 'Macro', 'api/macros/nlohmann_define_type_non_intrusive/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_type_non_intrusive/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT', 'Macro', 'api/macros/nlohmann_define_type_non_intrusive/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_NAMES', 'Macro', 'api/macros/nlohmann_define_type_with_names/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE', 'Macro', 'api/macros/nlohmann_json_namespace/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE', 'Macro', 'api/macros/nlohmann_json_namespace/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE_BEGIN', 'Macro', 'api/macros/nlohmann_json_namespace_begin/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE_BEGIN', 'Macro', 'api/macros/nlohmann_json_namespace_begin/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE_END', 'Macro', 'api/macros/nlohmann_json_namespace_begin/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE_END', 'Macro', 'api/macros/nlohmann_json_namespace_begin/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE_NO_VERSION', 'Macro', 'api/macros/nlohmann_json_namespace_no_version/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_NAMESPACE_NO_VERSION', 'Macro', 'api/macros/nlohmann_json_namespace_no_version/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_SERIALIZE_ENUM', 'Macro', 'api/macros/nlohmann_json_serialize_enum/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_SERIALIZE_ENUM', 'Macro', 'api/macros/nlohmann_json_serialize_enum/index.html');
|
||||||
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_SERIALIZE_ENUM_STRICT', 'Macro', 'api/macros/nlohmann_json_serialize_enum_strict/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_VERSION_MAJOR', 'Macro', 'api/macros/nlohmann_json_version_major/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_VERSION_MAJOR', 'Macro', 'api/macros/nlohmann_json_version_major/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_VERSION_MINOR', 'Macro', 'api/macros/nlohmann_json_version_major/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_VERSION_MINOR', 'Macro', 'api/macros/nlohmann_json_version_major/index.html');
|
||||||
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_VERSION_PATCH', 'Macro', 'api/macros/nlohmann_json_version_major/index.html');
|
INSERT INTO searchIndex(name, type, path) VALUES ('NLOHMANN_JSON_VERSION_PATCH', 'Macro', 'api/macros/nlohmann_json_version_major/index.html');
|
||||||
|
|||||||
+12
-1
@@ -1,3 +1,8 @@
|
|||||||
|
# The MkDocs 2.0 banners of Material for MkDocs and ProperDocs (via mkdocs-redirects) are printed to stderr, not
|
||||||
|
# logged, so they do not affect --strict; silence them anyway.
|
||||||
|
export NO_MKDOCS_2_WARNING := true
|
||||||
|
export DISABLE_MKDOCS_2_WARNING := true
|
||||||
|
|
||||||
# serve the site locally
|
# serve the site locally
|
||||||
serve: style_check
|
serve: style_check
|
||||||
venv/bin/mkdocs serve
|
venv/bin/mkdocs serve
|
||||||
@@ -8,11 +13,17 @@ serve_dirty: style_check
|
|||||||
# This target is used in the CI (ci_test_build_documentation).
|
# This target is used in the CI (ci_test_build_documentation).
|
||||||
# This target is used by the docset Makefile.
|
# This target is used by the docset Makefile.
|
||||||
build: style_check
|
build: style_check
|
||||||
venv/bin/mkdocs build
|
venv/bin/mkdocs build --strict
|
||||||
|
|
||||||
style_check:
|
style_check:
|
||||||
@cd docs ; ../venv/bin/python3 ../scripts/check_structure.py
|
@cd docs ; ../venv/bin/python3 ../scripts/check_structure.py
|
||||||
|
|
||||||
|
# check that all Mermaid diagrams parse (needs Node.js)
|
||||||
|
# This target is used in the CI (ci_test_documentation_mermaid).
|
||||||
|
check_mermaid:
|
||||||
|
npm ci --prefix scripts/mermaid --ignore-scripts --no-audit --no-fund
|
||||||
|
node scripts/mermaid/check_mermaid.mjs docs
|
||||||
|
|
||||||
# check the links in the documentation files in docs/mkdocs
|
# check the links in the documentation files in docs/mkdocs
|
||||||
link_check:
|
link_check:
|
||||||
ENABLED_HTMLPROOFER=true venv/bin/mkdocs build
|
ENABLED_HTMLPROOFER=true venv/bin/mkdocs build
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example "Example: (1) reading from a string"
|
||||||
|
|
||||||
The example below demonstrates the `accept()` function reading from a string.
|
The example below demonstrates the `accept()` function reading from a string.
|
||||||
|
|
||||||
@@ -110,6 +110,21 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
--8<-- "examples/accept__string.output"
|
--8<-- "examples/accept__string.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? example "Example: (2) reading from an iterator pair"
|
||||||
|
|
||||||
|
The example below demonstrates the `accept()` function reading from an iterator pair. Only the first call covers
|
||||||
|
exactly the JSON text; the second one also covers the trailing bytes and is therefore rejected.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
--8<-- "examples/accept__iterator_pair.cpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```json
|
||||||
|
--8<-- "examples/accept__iterator_pair.output"
|
||||||
|
```
|
||||||
|
|
||||||
## See also
|
## See also
|
||||||
|
|
||||||
- [parse](parse.md) - deserialize from a compatible input
|
- [parse](parse.md) - deserialize from a compatible input
|
||||||
@@ -137,3 +152,5 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
|
|
||||||
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
function.
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#parsing) for how to update existing code.
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ To store objects in C++, a type is defined by the template parameters explained
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
#### Default type
|
### Default type
|
||||||
|
|
||||||
With the default values for `ArrayType` (`std::vector`) and `AllocatorType` (`std::allocator`), the default value for
|
With the default values for `ArrayType` (`std::vector`) and `AllocatorType` (`std::allocator`), the default value for
|
||||||
`array_t` is:
|
`array_t` is:
|
||||||
@@ -37,7 +37,7 @@ std::vector<
|
|||||||
>
|
>
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Limits
|
### Limits
|
||||||
|
|
||||||
[RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
|
[RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
|
||||||
> An implementation may set limits on the maximum depth of nesting.
|
> An implementation may set limits on the maximum depth of nesting.
|
||||||
@@ -46,7 +46,7 @@ In this class, the array's limit of nesting is not explicitly constrained. Howev
|
|||||||
introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the
|
introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the
|
||||||
[`max_size`](max_size.md) function of a JSON array.
|
[`max_size`](max_size.md) function of a JSON array.
|
||||||
|
|
||||||
#### Storage
|
### Storage
|
||||||
|
|
||||||
Arrays are stored as pointers in a `basic_json` type. That is, for any access to array values, a pointer of type
|
Arrays are stored as pointers in a `basic_json` type. That is, for any access to array values, a pointer of type
|
||||||
`#!cpp array_t*` must be dereferenced.
|
`#!cpp array_t*` must be dereferenced.
|
||||||
@@ -67,6 +67,13 @@ Arrays are stored as pointers in a `basic_json` type. That is, for any access to
|
|||||||
--8<-- "examples/array_t.output"
|
--8<-- "examples/array_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [object_t](object_t.md) the type used to store JSON objects
|
||||||
|
- [binary_t](binary_t.md) the type used to store binary values
|
||||||
|
- [is_array](is_array.md) checks whether the JSON value is an array
|
||||||
|
- [max_size](max_size.md) returns the maximum possible number of elements
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -92,6 +92,20 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
3. Logarithmic in the size of the container.
|
3. Logarithmic in the size of the container.
|
||||||
4. Logarithmic in the size of the container.
|
4. Logarithmic in the size of the container.
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
!!! warning "Deprecation"
|
||||||
|
|
||||||
|
Overload (4) also accepts a [`json_pointer`](../json_pointer/index.md) whose template argument is a `basic_json`
|
||||||
|
specialization (e.g., `nlohmann::json_pointer<nlohmann::json>`) instead of a string type. This is deprecated since
|
||||||
|
version 3.11.0 and will be removed in a future major version; use `basic_json::json_pointer` (for `json`,
|
||||||
|
`nlohmann::json_pointer<std::string>`) instead.
|
||||||
|
|
||||||
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#json-pointers) for how to update existing code.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example "Example: (1) access specified array element with bounds checking"
|
??? example "Example: (1) access specified array element with bounds checking"
|
||||||
|
|||||||
@@ -99,6 +99,25 @@ basic_json(basic_json&& other) noexcept;
|
|||||||
elements of the pairs are treated as keys and the second elements are as values.
|
elements of the pairs are treated as keys and the second elements are as values.
|
||||||
3. In all other cases, an array is created.
|
3. In all other cases, an array is created.
|
||||||
|
|
||||||
|
The following flowchart also takes into account what happens when `type_deduction` is `#!cpp false`, in which case
|
||||||
|
`manual_type` decides between object and array, and an object can only be forced if `init` actually matches rule 2
|
||||||
|
(or is empty):
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart TD
|
||||||
|
A(["initializer_list init"]) --> B{"empty, or every element is a 2-element<br/>array whose first element is a string?"}
|
||||||
|
B -->|"yes"| C{"type_deduction"}
|
||||||
|
B -->|"no"| D{"type_deduction"}
|
||||||
|
C -->|"true"| OBJ["create object"]
|
||||||
|
C -->|"false"| E{"manual_type"}
|
||||||
|
E -->|"object"| OBJ
|
||||||
|
E -->|"array"| ARR["create array"]
|
||||||
|
D -->|"true"| ARR
|
||||||
|
D -->|"false"| F{"manual_type"}
|
||||||
|
F -->|"array"| ARR
|
||||||
|
F -->|"object"| ERR["throw type_error.301"]
|
||||||
|
```
|
||||||
|
|
||||||
The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:
|
The rules aim to create the best fit between a C++ initializer list and JSON values. The rationale is as follows:
|
||||||
|
|
||||||
1. The empty initializer list is written as `#!cpp {}` which is exactly an empty JSON object.
|
1. The empty initializer list is written as `#!cpp {}` which is exactly an empty JSON object.
|
||||||
@@ -139,8 +158,8 @@ basic_json(basic_json&& other) noexcept;
|
|||||||
|
|
||||||
- In case of a `#!json null` type, [invalid_iterator.206](../../home/exceptions.md#jsonexceptioninvalid_iterator206)
|
- In case of a `#!json null` type, [invalid_iterator.206](../../home/exceptions.md#jsonexceptioninvalid_iterator206)
|
||||||
is thrown.
|
is thrown.
|
||||||
- In case of other primitive types (number, boolean, or string), `first` must be `begin()` and `last` must be
|
- In case of other primitive types (number, boolean, string, or binary), `first` must be `begin()` and `last`
|
||||||
`end()`. In this case, the value is copied. Otherwise,
|
must be `end()`. In this case, the value is copied. Otherwise,
|
||||||
[`invalid_iterator.204`](../../home/exceptions.md#jsonexceptioninvalid_iterator204) is thrown.
|
[`invalid_iterator.204`](../../home/exceptions.md#jsonexceptioninvalid_iterator204) is thrown.
|
||||||
- In case of structured types (array, object), the constructor behaves as similar versions for `std::vector` or
|
- In case of structured types (array, object), the constructor behaves as similar versions for `std::vector` or
|
||||||
`std::map`; that is, a JSON array or object is constructed from the values in the range.
|
`std::map`; that is, a JSON array or object is constructed from the values in the range.
|
||||||
@@ -169,8 +188,8 @@ basic_json(basic_json&& other) noexcept;
|
|||||||
- `BasicJsonType` has different template arguments than `basic_json_t`.
|
- `BasicJsonType` has different template arguments than `basic_json_t`.
|
||||||
|
|
||||||
**Note:** For cross-`basic_json` conversions to produce correct results, the target `basic_json`'s
|
**Note:** For cross-`basic_json` conversions to produce correct results, the target `basic_json`'s
|
||||||
`object_t::key_type` and `string_t` must be directly constructible from the source `basic_json`'s
|
[`object_t`](object_t.md)`::key_type` and [`string_t`](string_t.md) must be directly constructible from the source
|
||||||
corresponding types. See the description of overload (4) above for details on what happens when
|
`basic_json`'s corresponding types. See the description of overload (4) above for details on what happens when
|
||||||
this requirement is not met.
|
this requirement is not met.
|
||||||
|
|
||||||
`U`:
|
`U`:
|
||||||
@@ -242,8 +261,8 @@ basic_json(basic_json&& other) noexcept;
|
|||||||
and `last` are not compatible (i.e., do not belong to the same JSON value). In this case, the range
|
and `last` are not compatible (i.e., do not belong to the same JSON value). In this case, the range
|
||||||
`[first, last)` is undefined.
|
`[first, last)` is undefined.
|
||||||
- Throws [`invalid_iterator.204`](../../home/exceptions.md#jsonexceptioninvalid_iterator204) if iterators `first`
|
- Throws [`invalid_iterator.204`](../../home/exceptions.md#jsonexceptioninvalid_iterator204) if iterators `first`
|
||||||
and `last` belong to a primitive type (number, boolean, or string), but `first` does not point to the first
|
and `last` belong to a primitive type (number, boolean, string, or binary), but `first` does not point to the
|
||||||
element anymore. In this case, the range `[first, last)` is undefined. See the example code below.
|
first element anymore. In this case, the range `[first, last)` is undefined. See the example code below.
|
||||||
- Throws [`invalid_iterator.206`](../../home/exceptions.md#jsonexceptioninvalid_iterator206) if iterators `first`
|
- Throws [`invalid_iterator.206`](../../home/exceptions.md#jsonexceptioninvalid_iterator206) if iterators `first`
|
||||||
and `last` belong to a `#!json null` value. In this case, the range `[first, last)` is undefined.
|
and `last` belong to a `#!json null` value. In this case, the range `[first, last)` is undefined.
|
||||||
8. (none)
|
8. (none)
|
||||||
@@ -345,6 +364,22 @@ basic_json(basic_json&& other) noexcept;
|
|||||||
|
|
||||||
Note the output is platform-dependent.
|
Note the output is platform-dependent.
|
||||||
|
|
||||||
|
??? example "Example: (4) create a JSON value from another `basic_json` specialization"
|
||||||
|
|
||||||
|
The example below shows how a `json` value is converted to an `ordered_json` value and back using the converting
|
||||||
|
constructor. Note how the original insertion order of `oj` is not restored, because it was already given up when
|
||||||
|
converting to `json`, whose `object_t` sorts by key.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
--8<-- "examples/basic_json__BasicJsonType.cpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```json
|
||||||
|
--8<-- "examples/basic_json__BasicJsonType.output"
|
||||||
|
```
|
||||||
|
|
||||||
??? example "Example: (5) create a container (array or object) from an initializer list"
|
??? example "Example: (5) create a container (array or object) from an initializer list"
|
||||||
|
|
||||||
The example below shows how JSON values are created from initializer lists.
|
The example below shows how JSON values are created from initializer lists.
|
||||||
@@ -415,6 +450,15 @@ basic_json(basic_json&& other) noexcept;
|
|||||||
--8<-- "examples/basic_json__moveconstructor.output"
|
--8<-- "examples/basic_json__moveconstructor.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [array](array.md) create a JSON array value, forcing array creation from an initializer list even when it looks like
|
||||||
|
an object
|
||||||
|
- [object](object.md) create a JSON object value, forcing object creation from an initializer list
|
||||||
|
- [binary](binary.md) create a JSON binary array value
|
||||||
|
- [operator=](operator=.md) copy assignment operator
|
||||||
|
- [Creating JSON values](../../features/creating_values.md) - the article on creating JSON values
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
1. Since version 1.0.0.
|
1. Since version 1.0.0.
|
||||||
@@ -423,6 +467,8 @@ basic_json(basic_json&& other) noexcept;
|
|||||||
4. Since version 3.2.0.
|
4. Since version 3.2.0.
|
||||||
5. Since version 1.0.0.
|
5. Since version 1.0.0.
|
||||||
6. Since version 1.0.0.
|
6. Since version 1.0.0.
|
||||||
7. Since version 1.0.0.
|
7. Since version 1.0.0. Fixed in version 3.13.0 to also check the iterator range for binary values; before, a range
|
||||||
|
that did not cover the whole value (such as `(end(), end())`) was accepted and the whole binary value was copied,
|
||||||
|
unlike the other primitive types.
|
||||||
8. Since version 1.0.0.
|
8. Since version 1.0.0.
|
||||||
9. Since version 1.0.0.
|
9. Since version 1.0.0.
|
||||||
|
|||||||
@@ -37,6 +37,14 @@ Constant.
|
|||||||
--8<-- "examples/begin.output"
|
--8<-- "examples/begin.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [end](end.md) returns an iterator to one past the last element
|
||||||
|
- [cbegin](cbegin.md) returns a const iterator to the first element
|
||||||
|
- [rbegin](rbegin.md) returns a reverse iterator to the last element
|
||||||
|
- [items](items.md) returns an iteration proxy to access keys and values during range-based for loops
|
||||||
|
- [Iterators](../../features/iterators.md) - the article on iterators
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ static basic_json binary(typename binary_t::container_type&& init);
|
|||||||
|
|
||||||
// (2)
|
// (2)
|
||||||
static basic_json binary(const typename binary_t::container_type& init,
|
static basic_json binary(const typename binary_t::container_type& init,
|
||||||
std::uint8_t subtype);
|
typename binary_t::subtype_type subtype);
|
||||||
static basic_json binary(typename binary_t::container_type&& init,
|
static basic_json binary(typename binary_t::container_type&& init,
|
||||||
std::uint8_t subtype);
|
typename binary_t::subtype_type subtype);
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Creates a JSON binary array value from a given binary container.
|
1. Creates a JSON binary array value from a given binary container.
|
||||||
@@ -61,6 +61,15 @@ initialization of a binary array type, for backwards compatibility and so it doe
|
|||||||
--8<-- "examples/binary.output"
|
--8<-- "examples/binary.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [binary_t](binary_t.md) type for binary values
|
||||||
|
- [get_binary](get_binary.md) get a reference to the stored binary value
|
||||||
|
- [is_binary](is_binary.md) return whether the value is binary
|
||||||
|
- [byte_container_with_subtype](../byte_container_with_subtype/index.md) container for binary values with subtype
|
||||||
|
- [Binary Values](../../features/binary_values.md) - the article on binary values
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 3.8.0.
|
- Added in version 3.8.0.
|
||||||
|
- Changed the type of `subtype` from `std::uint8_t` to `binary_t::subtype_type` (`std::uint64_t`) in version 3.10.0.
|
||||||
|
|||||||
@@ -48,16 +48,16 @@ represent a byte array in modern C++.
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
#### Default type
|
### Default type
|
||||||
|
|
||||||
The default values for `BinaryType` is `#!cpp std::vector<std::uint8_t>`.
|
The default values for `BinaryType` is `#!cpp std::vector<std::uint8_t>`.
|
||||||
|
|
||||||
#### Supported byte types
|
### Supported byte types
|
||||||
|
|
||||||
`#!cpp std::vector<std::uint8_t>`, `#!cpp std::vector<char>`, and `#!cpp std::vector<std::byte>` are supported.
|
`#!cpp std::vector<std::uint8_t>`, `#!cpp std::vector<char>`, and `#!cpp std::vector<std::byte>` are supported.
|
||||||
Regardless of which of them is configured, [`dump`](dump.md) writes the bytes as the numbers 0..255.
|
Regardless of which of them is configured, [`dump`](dump.md) writes the bytes as the numbers 0..255.
|
||||||
|
|
||||||
#### Custom BinaryType behavior
|
### Custom BinaryType behavior
|
||||||
|
|
||||||
When a custom `BinaryType` is configured (other than the default `#!cpp std::vector<std::uint8_t>`), you can assign
|
When a custom `BinaryType` is configured (other than the default `#!cpp std::vector<std::uint8_t>`), you can assign
|
||||||
values of that type directly to a `basic_json` instance, and they will automatically be recognized as binary values
|
values of that type directly to a `basic_json` instance, and they will automatically be recognized as binary values
|
||||||
@@ -89,12 +89,12 @@ assert(extracted == data);
|
|||||||
This automatic type detection is a convenience feature that only applies to custom (non-default) `BinaryType` configurations.
|
This automatic type detection is a convenience feature that only applies to custom (non-default) `BinaryType` configurations.
|
||||||
The default `nlohmann::json` continues to treat `#!cpp std::vector<std::uint8_t>` as arrays for backward compatibility.
|
The default `nlohmann::json` continues to treat `#!cpp std::vector<std::uint8_t>` as arrays for backward compatibility.
|
||||||
|
|
||||||
#### Storage
|
### Storage
|
||||||
|
|
||||||
Binary Arrays are stored as pointers in a `basic_json` type. That is, for any access to array values, a pointer of the
|
Binary Arrays are stored as pointers in a `basic_json` type. That is, for any access to array values, a pointer of the
|
||||||
type `#!cpp binary_t*` must be dereferenced.
|
type `#!cpp binary_t*` must be dereferenced.
|
||||||
|
|
||||||
#### Notes on subtypes
|
### Notes on subtypes
|
||||||
|
|
||||||
- CBOR
|
- CBOR
|
||||||
- Binary values are represented as byte strings. Subtypes are written as tags.
|
- Binary values are represented as byte strings. Subtypes are written as tags.
|
||||||
|
|||||||
@@ -21,11 +21,11 @@ To store boolean values in C++, a type is defined by the template parameter `Bo
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
#### Default type
|
### Default type
|
||||||
|
|
||||||
With the default values for `BooleanType` (`#!cpp bool`), the default value for `boolean_t` is `#!cpp bool`.
|
With the default values for `BooleanType` (`#!cpp bool`), the default value for `boolean_t` is `#!cpp bool`.
|
||||||
|
|
||||||
#### Storage
|
### Storage
|
||||||
|
|
||||||
Boolean values are stored directly inside a `basic_json` type.
|
Boolean values are stored directly inside a `basic_json` type.
|
||||||
|
|
||||||
@@ -45,6 +45,10 @@ Boolean values are stored directly inside a `basic_json` type.
|
|||||||
--8<-- "examples/boolean_t.output"
|
--8<-- "examples/boolean_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [is_boolean](is_boolean.md) checks whether the JSON value is a boolean
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -36,6 +36,13 @@ Constant.
|
|||||||
--8<-- "examples/cbegin.output"
|
--8<-- "examples/cbegin.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [begin](begin.md) returns an iterator to the first element
|
||||||
|
- [cend](cend.md) returns a const iterator to one past the last element
|
||||||
|
- [crbegin](crbegin.md) returns a const reverse iterator to the last element
|
||||||
|
- [Iterators](../../features/iterators.md) - the article on iterators
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -18,7 +18,8 @@ ignore
|
|||||||
: ignore tags
|
: ignore tags
|
||||||
|
|
||||||
store
|
store
|
||||||
: store tagged values as binary container with subtype (for bytes 0xd8..0xdb)
|
: store tagged byte strings (for bytes 0xd8..0xdb) as binary values with the tag as subtype; other tagged values are
|
||||||
|
read as if the tag were ignored. If several tags precede a byte string, only the innermost one is stored.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
@@ -37,6 +38,12 @@ store
|
|||||||
--8<-- "examples/cbor_tag_handler_t.output"
|
--8<-- "examples/cbor_tag_handler_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [from_cbor](from_cbor.md) deserializes a JSON value from CBOR
|
||||||
|
- [input_format_t](input_format_t.md) the enumeration of supported input formats
|
||||||
|
- [CBOR](../../features/binary_formats/cbor.md) - the article on the CBOR format
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 3.9.0. Added value `store` in 3.10.0.
|
- Added in version 3.9.0. Added value `store` in 3.10.0.
|
||||||
|
|||||||
@@ -36,6 +36,13 @@ Constant.
|
|||||||
--8<-- "examples/cend.output"
|
--8<-- "examples/cend.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [end](end.md) returns an iterator to one past the last element
|
||||||
|
- [cbegin](cbegin.md) returns a const iterator to the first element
|
||||||
|
- [crend](crend.md) returns a const reverse iterator to one before the first element
|
||||||
|
- [Iterators](../../features/iterators.md) - the article on iterators
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -7,15 +7,15 @@ void clear() noexcept;
|
|||||||
Clears the content of a JSON value and resets it to the default value as if [`basic_json(value_t)`](basic_json.md) would
|
Clears the content of a JSON value and resets it to the default value as if [`basic_json(value_t)`](basic_json.md) would
|
||||||
have been called with the current value type from [`type()`](type.md):
|
have been called with the current value type from [`type()`](type.md):
|
||||||
|
|
||||||
| Value type | initial value |
|
| Value type | initial value |
|
||||||
|------------|----------------------|
|
|------------|-----------------------------------------|
|
||||||
| null | `null` |
|
| null | `null` |
|
||||||
| boolean | `false` |
|
| boolean | `false` |
|
||||||
| string | `""` |
|
| string | `""` |
|
||||||
| number | `0` |
|
| number | `0` |
|
||||||
| binary | An empty byte vector |
|
| binary | An empty byte vector with no subtype |
|
||||||
| object | `{}` |
|
| object | `{}` |
|
||||||
| array | `[]` |
|
| array | `[]` |
|
||||||
|
|
||||||
Has the same effect as calling
|
Has the same effect as calling
|
||||||
|
|
||||||
@@ -52,7 +52,13 @@ All iterators, pointers, and references related to this container are invalidate
|
|||||||
--8<-- "examples/clear.output"
|
--8<-- "examples/clear.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [erase](erase.md) removes elements from a JSON value
|
||||||
|
- [empty](empty.md) checks whether the JSON value has no elements
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
- Added support for binary types in version 3.8.0.
|
- Added support for binary types in version 3.8.0.
|
||||||
|
- Fixed in version 3.13.0 to also clear the subtype of a binary value; before, the subtype was left unchanged.
|
||||||
|
|||||||
@@ -58,11 +58,27 @@ Logarithmic in the size of the JSON object.
|
|||||||
|
|
||||||
- This method always returns `#!cpp false` when executed on a JSON type that is not an object.
|
- This method always returns `#!cpp false` when executed on a JSON type that is not an object.
|
||||||
- This method can be executed on any JSON value type.
|
- This method can be executed on any JSON value type.
|
||||||
|
- Calling this function with an integer argument (for example, `#!cpp contains(0)`) does not compile: such an argument
|
||||||
|
would otherwise implicitly convert to a null `#!cpp const char*` and, from there, cause undefined behavior when
|
||||||
|
constructing a `#!cpp std::string` for the object key. To check for an array element instead, use [`at`](at.md),
|
||||||
|
[`operator[]`](operator%5B%5D.md), or compare against [`size`](size.md).
|
||||||
|
|
||||||
!!! info "Postconditions"
|
!!! info "Postconditions"
|
||||||
|
|
||||||
If `#!cpp j.contains(x)` returns `#!c true` for a key or JSON pointer `x`, then it is safe to call `j[x]`.
|
If `#!cpp j.contains(x)` returns `#!c true` for a key or JSON pointer `x`, then it is safe to call `j[x]`.
|
||||||
|
|
||||||
|
!!! warning "Deprecation"
|
||||||
|
|
||||||
|
Overload (3) also accepts a [`json_pointer`](../json_pointer/index.md) whose template argument is a `basic_json`
|
||||||
|
specialization (e.g., `nlohmann::json_pointer<nlohmann::json>`) instead of a string type. This is deprecated since
|
||||||
|
version 3.11.0 and will be removed in a future major version; use `basic_json::json_pointer` (for `json`,
|
||||||
|
`nlohmann::json_pointer<std::string>`) instead.
|
||||||
|
|
||||||
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#json-pointers) for how to update existing code.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example "Example: (1) check with key"
|
??? example "Example: (1) check with key"
|
||||||
@@ -117,3 +133,5 @@ Logarithmic in the size of the JSON object.
|
|||||||
1. Added in version 3.11.0.
|
1. Added in version 3.11.0.
|
||||||
2. Added in version 3.6.0. Extended template `KeyType` to support comparable types in version 3.11.0.
|
2. Added in version 3.6.0. Extended template `KeyType` to support comparable types in version 3.11.0.
|
||||||
3. Added in version 3.7.0.
|
3. Added in version 3.7.0.
|
||||||
|
4. Deleted overloads for integral key types added in version 3.13.0 to reject such calls at compile time instead of
|
||||||
|
causing undefined behavior at runtime.
|
||||||
|
|||||||
@@ -40,7 +40,11 @@ Logarithmic in the size of the JSON object.
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
This method always returns `0` when executed on a JSON type that is not an object.
|
- This method always returns `0` when executed on a JSON type that is not an object.
|
||||||
|
- Calling this function with an integer argument (for example, `#!cpp count(0)`) does not compile: such an argument
|
||||||
|
would otherwise implicitly convert to a null `#!cpp const char*` and, from there, cause undefined behavior when
|
||||||
|
constructing a `#!cpp std::string` for the object key. To check for an array element instead, use [`at`](at.md),
|
||||||
|
[`operator[]`](operator%5B%5D.md), or compare against [`size`](size.md).
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
@@ -81,3 +85,5 @@ This method always returns `0` when executed on a JSON type that is not an objec
|
|||||||
|
|
||||||
1. Added in version 3.11.0.
|
1. Added in version 3.11.0.
|
||||||
2. Added in version 1.0.0. Changed parameter `key` type to `KeyType&&` in version 3.11.0.
|
2. Added in version 1.0.0. Changed parameter `key` type to `KeyType&&` in version 3.11.0.
|
||||||
|
3. Deleted overload for integral key types added in version 3.13.0 to reject such calls at compile time instead of
|
||||||
|
causing undefined behavior at runtime.
|
||||||
|
|||||||
@@ -36,6 +36,13 @@ Constant.
|
|||||||
--8<-- "examples/crbegin.output"
|
--8<-- "examples/crbegin.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [crend](crend.md) returns a const reverse iterator to one before the first element
|
||||||
|
- [rbegin](rbegin.md) returns a reverse iterator to the last element
|
||||||
|
- [cbegin](cbegin.md) returns a const iterator to the first element
|
||||||
|
- [Iterators](../../features/iterators.md) - the article on iterators
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -37,6 +37,13 @@ Constant.
|
|||||||
--8<-- "examples/crend.output"
|
--8<-- "examples/crend.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [crbegin](crbegin.md) returns a const reverse iterator to the last element
|
||||||
|
- [rend](rend.md) returns a reverse iterator to one before the first element
|
||||||
|
- [cend](cend.md) returns a const iterator to one past the last element
|
||||||
|
- [Iterators](../../features/iterators.md) - the article on iterators
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -30,6 +30,11 @@ The actual comparator used depends on [`object_t`](object_t.md) and can be obtai
|
|||||||
--8<-- "examples/default_object_comparator_t.output"
|
--8<-- "examples/default_object_comparator_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [object_comparator_t](object_comparator_t.md) the comparator actually used by `object_t`
|
||||||
|
- [object_t](object_t.md) the type used to store JSON objects
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 3.11.0.
|
- Added in version 3.11.0.
|
||||||
|
|||||||
@@ -31,7 +31,8 @@ a `#!cpp bool` denoting whether the insertion took place.
|
|||||||
|
|
||||||
## Exception safety
|
## Exception safety
|
||||||
|
|
||||||
Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
|
Strong guarantee: if an exception is thrown, there are no changes to any JSON value. As an exception, a `#!json null`
|
||||||
|
value is converted to an empty object before the element is added and keeps that type if adding the element throws.
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,11 @@ iterator is invalidated.
|
|||||||
|
|
||||||
reference to the inserted element
|
reference to the inserted element
|
||||||
|
|
||||||
|
## Exception safety
|
||||||
|
|
||||||
|
Strong guarantee: if an exception is thrown, there are no changes to any JSON value. As an exception, a `#!json null`
|
||||||
|
value is converted to an empty array before the element is added and keeps that type if adding the element throws.
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
Throws [`type_error.311`](../../home/exceptions.md#jsonexceptiontype_error311) when called on a type other than JSON
|
Throws [`type_error.311`](../../home/exceptions.md#jsonexceptiontype_error311) when called on a type other than JSON
|
||||||
|
|||||||
@@ -60,6 +60,11 @@ itself is empty which is `#!cpp false` in the case of a string.
|
|||||||
--8<-- "examples/empty.output"
|
--8<-- "examples/empty.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [size](size.md) returns the number of elements
|
||||||
|
- [clear](clear.md) clears the content and resets the value to the default value
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -37,6 +37,13 @@ Constant.
|
|||||||
--8<-- "examples/end.output"
|
--8<-- "examples/end.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [begin](begin.md) returns an iterator to the first element
|
||||||
|
- [cend](cend.md) returns a const iterator to one past the last element
|
||||||
|
- [rend](rend.md) returns a reverse iterator to one before the first element
|
||||||
|
- [Iterators](../../features/iterators.md) - the article on iterators
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -37,6 +37,11 @@ ignore
|
|||||||
--8<-- "examples/error_handler_t.output"
|
--8<-- "examples/error_handler_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [dump](dump.md) serializes a JSON value, with an `error_handler_t` parameter to configure invalid UTF-8 handling
|
||||||
|
- [Handling invalid UTF-8](../../features/serialization.md#handling-invalid-utf-8) - the article on handling invalid UTF-8
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 3.4.0.
|
- Added in version 3.4.0.
|
||||||
|
|||||||
@@ -44,7 +44,11 @@ Logarithmic in the size of the JSON object.
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
This method always returns `end()` when executed on a JSON type that is not an object.
|
- This method always returns `end()` when executed on a JSON type that is not an object.
|
||||||
|
- Calling this function with an integer argument (for example, `#!cpp find(0)`) does not compile: such an argument
|
||||||
|
would otherwise implicitly convert to a null `#!cpp const char*` and, from there, cause undefined behavior when
|
||||||
|
constructing a `#!cpp std::string` for the object key. To access an array element instead, use [`at`](at.md),
|
||||||
|
[`operator[]`](operator%5B%5D.md), or compare against [`size`](size.md).
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
@@ -85,3 +89,5 @@ This method always returns `end()` when executed on a JSON type that is not an o
|
|||||||
|
|
||||||
1. Added in version 3.11.0.
|
1. Added in version 3.11.0.
|
||||||
2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
|
2. Added in version 1.0.0. Changed to support comparable types in version 3.11.0.
|
||||||
|
3. Deleted overloads for integral key types added in version 3.13.0 to reject such calls at compile time instead of
|
||||||
|
causing undefined behavior at runtime.
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ Empty objects and arrays are flattened to `#!json null` and will not be reconstr
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example "Example: flatten a JSON object"
|
||||||
|
|
||||||
The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.
|
The following code shows how a JSON object is flattened to an object whose keys consist of JSON pointers.
|
||||||
|
|
||||||
@@ -41,6 +41,21 @@ Empty objects and arrays are flattened to `#!json null` and will not be reconstr
|
|||||||
--8<-- "examples/flatten.output"
|
--8<-- "examples/flatten.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? example "Example: empty objects and arrays are flattened to `#!json null`"
|
||||||
|
|
||||||
|
The following code shows that an empty object and an empty array are both flattened to `#!json null`, and that
|
||||||
|
`unflatten()` restores them as `#!json null` rather than as empty containers.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
--8<-- "examples/flatten__empty.cpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```json
|
||||||
|
--8<-- "examples/flatten__empty.output"
|
||||||
|
```
|
||||||
|
|
||||||
## See also
|
## See also
|
||||||
|
|
||||||
- [unflatten](unflatten.md) the reverse function
|
- [unflatten](unflatten.md) the reverse function
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ Linear in the size of the input.
|
|||||||
- [from_msgpack](from_msgpack.md) create a JSON value from an input in MessagePack format
|
- [from_msgpack](from_msgpack.md) create a JSON value from an input in MessagePack format
|
||||||
- [from_bson](from_bson.md) create a JSON value from an input in BSON format
|
- [from_bson](from_bson.md) create a JSON value from an input in BSON format
|
||||||
- [from_ubjson](from_ubjson.md) create a JSON value from an input in UBJSON format
|
- [from_ubjson](from_ubjson.md) create a JSON value from an input in UBJSON format
|
||||||
|
- [from_bon8](from_bon8.md) create a JSON value from an input in BON8 format
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,108 @@
|
|||||||
|
# <small>nlohmann::basic_json::</small>from_bon8
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
// (1)
|
||||||
|
template<typename InputType>
|
||||||
|
static basic_json from_bon8(InputType&& i,
|
||||||
|
const bool strict = true,
|
||||||
|
const bool allow_exceptions = true);
|
||||||
|
// (2)
|
||||||
|
template<typename IteratorType, typename SentinelType = IteratorType>
|
||||||
|
static basic_json from_bon8(IteratorType first, SentinelType last,
|
||||||
|
const bool strict = true,
|
||||||
|
const bool allow_exceptions = true);
|
||||||
|
```
|
||||||
|
|
||||||
|
Deserializes a given input to a JSON value using the BON8 (Binary Object Notation 8) serialization format.
|
||||||
|
|
||||||
|
1. Reads from a compatible input.
|
||||||
|
2. Reads from an iterator range, or an iterator and a sentinel of a different type (C++20 ranges support).
|
||||||
|
|
||||||
|
The exact mapping and its limitations are described on a [dedicated page](../../features/binary_formats/bon8.md).
|
||||||
|
|
||||||
|
## Template parameters
|
||||||
|
|
||||||
|
`InputType`
|
||||||
|
: A compatible input, for instance:
|
||||||
|
|
||||||
|
- an `std::istream` object
|
||||||
|
- a `FILE` pointer
|
||||||
|
- a C-style array of characters
|
||||||
|
- a pointer to a null-terminated string of single byte characters
|
||||||
|
- a container `obj` for which `begin(obj)` and `end(obj)` produce a valid pair of iterators
|
||||||
|
(as found via ADL or member functions, with semantics compatible to `std::begin` and `std::end`)
|
||||||
|
|
||||||
|
`IteratorType`
|
||||||
|
: a compatible iterator type
|
||||||
|
|
||||||
|
`SentinelType`
|
||||||
|
: defaults to `IteratorType`; may be a different type comparable to `IteratorType` via `operator!=`, for instance.
|
||||||
|
|
||||||
|
- a custom sentinel type for C++20 ranges
|
||||||
|
- `std::default_sentinel_t`, when `IteratorType` is `std::counted_iterator`
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
`i` (in)
|
||||||
|
: an input in BON8 format convertible to an input adapter
|
||||||
|
|
||||||
|
`first` (in)
|
||||||
|
: iterator to the start of the input
|
||||||
|
|
||||||
|
`last` (in)
|
||||||
|
: iterator to the end of the input, or a sentinel value that compares equal to the end iterator with `operator!=`
|
||||||
|
|
||||||
|
`strict` (in)
|
||||||
|
: whether to expect the input to be consumed until EOF (`#!cpp true` by default)
|
||||||
|
|
||||||
|
`allow_exceptions` (in)
|
||||||
|
: whether to throw exceptions in case of a parse error (optional, `#!cpp true` by default)
|
||||||
|
|
||||||
|
## Return value
|
||||||
|
|
||||||
|
deserialized JSON value; in case of a parse error and `allow_exceptions` set to `#!cpp false`, the return value will be
|
||||||
|
`value_t::discarded`. The latter can be checked with [`is_discarded`](is_discarded.md).
|
||||||
|
|
||||||
|
## Exception safety
|
||||||
|
|
||||||
|
Strong guarantee: if an exception is thrown, there are no changes in the JSON value.
|
||||||
|
|
||||||
|
## Exceptions
|
||||||
|
|
||||||
|
- Throws [parse_error.110](../../home/exceptions.md#jsonexceptionparse_error110) if the given input ends prematurely or
|
||||||
|
the end of the file was not reached when `strict` was set to true
|
||||||
|
- Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if a parse error occurs, for instance
|
||||||
|
an invalid byte, a string that is not valid UTF-8, or an object key that is not a string
|
||||||
|
|
||||||
|
## Complexity
|
||||||
|
|
||||||
|
Linear in the size of the input.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
??? example
|
||||||
|
|
||||||
|
The example shows the deserialization of a byte vector in BON8 format to a JSON value.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
--8<-- "examples/from_bon8.cpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```json
|
||||||
|
--8<-- "examples/from_bon8.output"
|
||||||
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [to_bon8](to_bon8.md) create a BON8 serialization of a JSON value
|
||||||
|
- [from_cbor](from_cbor.md) create a JSON value from an input in CBOR format
|
||||||
|
- [from_msgpack](from_msgpack.md) create a JSON value from an input in MessagePack format
|
||||||
|
- [from_bson](from_bson.md) create a JSON value from an input in BSON format
|
||||||
|
- [from_ubjson](from_ubjson.md) create a JSON value from an input in UBJSON format
|
||||||
|
- [from_bjdata](from_bjdata.md) create a JSON value from an input in BJData format
|
||||||
|
|
||||||
|
## Version history
|
||||||
|
|
||||||
|
- Added in version 3.13.0.
|
||||||
@@ -104,6 +104,7 @@ Linear in the size of the input.
|
|||||||
- [from_msgpack](from_msgpack.md) for the related MessagePack format
|
- [from_msgpack](from_msgpack.md) for the related MessagePack format
|
||||||
- [from_ubjson](from_ubjson.md) for the related UBJSON format
|
- [from_ubjson](from_ubjson.md) for the related UBJSON format
|
||||||
- [from_bjdata](from_bjdata.md) for the related BJData format
|
- [from_bjdata](from_bjdata.md) for the related BJData format
|
||||||
|
- [from_bon8](from_bon8.md) for the related BON8 format
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
@@ -122,3 +123,5 @@ Linear in the size of the input.
|
|||||||
|
|
||||||
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
function.
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#parsing) for how to update existing code.
|
||||||
|
|||||||
@@ -80,8 +80,8 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
|||||||
the end of the file was not reached when `strict` was set to true
|
the end of the file was not reached when `strict` was set to true
|
||||||
- Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if unsupported features from CBOR were
|
- Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if unsupported features from CBOR were
|
||||||
used in the given input or if the input is not valid CBOR
|
used in the given input or if the input is not valid CBOR
|
||||||
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string was expected as a map key,
|
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a map key is not a string (keys of other
|
||||||
but not found
|
types are not supported, as JSON object keys are always strings) or a string is malformed
|
||||||
|
|
||||||
## Complexity
|
## Complexity
|
||||||
|
|
||||||
@@ -110,6 +110,7 @@ Linear in the size of the input.
|
|||||||
- [from_bson](from_bson.md) create a JSON value from an input in BSON format
|
- [from_bson](from_bson.md) create a JSON value from an input in BSON format
|
||||||
- [from_ubjson](from_ubjson.md) create a JSON value from an input in UBJSON format
|
- [from_ubjson](from_ubjson.md) create a JSON value from an input in UBJSON format
|
||||||
- [from_bjdata](from_bjdata.md) create a JSON value from an input in BJData format
|
- [from_bjdata](from_bjdata.md) create a JSON value from an input in BJData format
|
||||||
|
- [from_bon8](from_bon8.md) create a JSON value from an input in BON8 format
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
@@ -132,3 +133,5 @@ Linear in the size of the input.
|
|||||||
|
|
||||||
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
function.
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#parsing) for how to update existing code.
|
||||||
|
|||||||
@@ -73,8 +73,8 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
|||||||
the end of the file was not reached when `strict` was set to true
|
the end of the file was not reached when `strict` was set to true
|
||||||
- Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if unsupported features from
|
- Throws [parse_error.112](../../home/exceptions.md#jsonexceptionparse_error112) if unsupported features from
|
||||||
MessagePack were used in the given input or if the input is not valid MessagePack
|
MessagePack were used in the given input or if the input is not valid MessagePack
|
||||||
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a string was expected as a map key,
|
- Throws [parse_error.113](../../home/exceptions.md#jsonexceptionparse_error113) if a map key is not a string (keys of other
|
||||||
but not found
|
types are not supported, as JSON object keys are always strings) or a string is malformed
|
||||||
|
|
||||||
## Complexity
|
## Complexity
|
||||||
|
|
||||||
@@ -103,6 +103,7 @@ Linear in the size of the input.
|
|||||||
- [from_bson](from_bson.md) create a JSON value from an input in BSON format
|
- [from_bson](from_bson.md) create a JSON value from an input in BSON format
|
||||||
- [from_ubjson](from_ubjson.md) create a JSON value from an input in UBJSON format
|
- [from_ubjson](from_ubjson.md) create a JSON value from an input in UBJSON format
|
||||||
- [from_bjdata](from_bjdata.md) create a JSON value from an input in BJData format
|
- [from_bjdata](from_bjdata.md) create a JSON value from an input in BJData format
|
||||||
|
- [from_bon8](from_bon8.md) create a JSON value from an input in BON8 format
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
@@ -124,3 +125,5 @@ Linear in the size of the input.
|
|||||||
|
|
||||||
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
function.
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#parsing) for how to update existing code.
|
||||||
|
|||||||
@@ -104,6 +104,7 @@ Linear in the size of the input.
|
|||||||
- [from_msgpack](from_msgpack.md) create a JSON value from an input in MessagePack format
|
- [from_msgpack](from_msgpack.md) create a JSON value from an input in MessagePack format
|
||||||
- [from_bson](from_bson.md) create a JSON value from an input in BSON format
|
- [from_bson](from_bson.md) create a JSON value from an input in BSON format
|
||||||
- [from_bjdata](from_bjdata.md) create a JSON value from an input in BJData format
|
- [from_bjdata](from_bjdata.md) create a JSON value from an input in BJData format
|
||||||
|
- [from_bon8](from_bon8.md) create a JSON value from an input in BON8 format
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
@@ -123,3 +124,5 @@ Linear in the size of the input.
|
|||||||
|
|
||||||
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
function.
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#parsing) for how to update existing code.
|
||||||
|
|||||||
@@ -13,16 +13,16 @@ BasicJsonType get() const;
|
|||||||
|
|
||||||
// (3)
|
// (3)
|
||||||
template<typename PointerType>
|
template<typename PointerType>
|
||||||
PointerType get_ptr();
|
PointerType get() noexcept;
|
||||||
|
|
||||||
template<typename PointerType>
|
template<typename PointerType>
|
||||||
constexpr const PointerType get_ptr() const noexcept;
|
const PointerType get() const noexcept; // constexpr since C++14
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Explicit type conversion between the JSON value and a compatible value which is
|
1. Explicit type conversion between the JSON value and a compatible value which is
|
||||||
[CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) and
|
[CopyConstructible](https://en.cppreference.com/w/cpp/named_req/CopyConstructible) and
|
||||||
[DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). The value is converted by
|
[DefaultConstructible](https://en.cppreference.com/w/cpp/named_req/DefaultConstructible). The value is converted by
|
||||||
calling the `json_serializer<ValueType>` `from_json()` method.
|
calling the [`json_serializer<ValueType>`](json_serializer.md) `from_json()` method.
|
||||||
|
|
||||||
The function is equivalent to executing
|
The function is equivalent to executing
|
||||||
```cpp
|
```cpp
|
||||||
@@ -84,6 +84,12 @@ constexpr const PointerType get_ptr() const noexcept;
|
|||||||
3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; `#!cpp nullptr`
|
3. pointer to the internally stored JSON value if the requested pointer type fits to the JSON value; `#!cpp nullptr`
|
||||||
otherwise
|
otherwise
|
||||||
|
|
||||||
|
## Exception safety
|
||||||
|
|
||||||
|
Depends on what `json_serializer<ValueType>` `from_json()` method throws for overloads (1) and (2); the JSON value
|
||||||
|
itself is never modified, since `get()` is a `#!cpp const` member function. No-throw guarantee for overload (3): this
|
||||||
|
function never throws exceptions.
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
Depends on what `json_serializer<ValueType>` `from_json()` method throws
|
Depends on what `json_serializer<ValueType>` `from_json()` method throws
|
||||||
@@ -123,13 +129,13 @@ overload (3).
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example "Example: (1) explicit conversion to compatible types"
|
||||||
|
|
||||||
The example below shows several conversions from JSON values
|
The example below shows several conversions from JSON values
|
||||||
to other types. There a few things to note: (1) Floating-point numbers can
|
to other types. There a few things to note: (1) Floating-point numbers can
|
||||||
be converted to integers, (2) A JSON array can be converted to a standard
|
be converted to integers, (2) A JSON array can be converted to a standard
|
||||||
`std::vector<short>`, (3) A JSON object can be converted to C++
|
`std::vector<short>`, (3) A JSON object can be converted to C++
|
||||||
associative containers such as `std::unordered_map<std::string, json>`.
|
associative containers such as `std::map<std::string, json>`.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
--8<-- "examples/get__ValueType_const.cpp"
|
--8<-- "examples/get__ValueType_const.cpp"
|
||||||
@@ -141,7 +147,21 @@ overload (3).
|
|||||||
--8<-- "examples/get__ValueType_const.output"
|
--8<-- "examples/get__ValueType_const.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example
|
??? example "Example: (2) explicit conversion to another `basic_json` specialization"
|
||||||
|
|
||||||
|
The example below shows how a `json` value is converted to an `ordered_json` value using `get<BasicJsonType>()`.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
--8<-- "examples/get__BasicJsonType.cpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```json
|
||||||
|
--8<-- "examples/get__BasicJsonType.output"
|
||||||
|
```
|
||||||
|
|
||||||
|
??? example "Example: (3) explicit pointer access to the stored value"
|
||||||
|
|
||||||
The example below shows how pointers to internal values of a JSON value can be requested. Note that no type
|
The example below shows how pointers to internal values of a JSON value can be requested. Note that no type
|
||||||
conversions are made and a `#cpp nullptr` is returned if the value and the requested pointer type does not match.
|
conversions are made and a `#cpp nullptr` is returned if the value and the requested pointer type does not match.
|
||||||
|
|||||||
@@ -10,6 +10,14 @@ Returns the allocator associated with the container.
|
|||||||
|
|
||||||
associated allocator
|
associated allocator
|
||||||
|
|
||||||
|
## Exception safety
|
||||||
|
|
||||||
|
Strong guarantee: if an exception is thrown, there are no changes to any JSON value.
|
||||||
|
|
||||||
|
## Complexity
|
||||||
|
|
||||||
|
Constant.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example
|
||||||
@@ -26,6 +34,11 @@ associated allocator
|
|||||||
--8<-- "examples/get_allocator.output"
|
--8<-- "examples/get_allocator.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [basic_json](index.md#template-parameters) the class template, with `AllocatorType` as one of its template parameters
|
||||||
|
- [Template Parameter Requirements](../../features/types/template_parameters.md#allocatortype) - the requirements for `AllocatorType`
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ ValueType& get_to(ValueType& v) const noexcept(
|
|||||||
```
|
```
|
||||||
|
|
||||||
Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by
|
Explicit type conversion between the JSON value and a compatible value. The value is filled into the input parameter by
|
||||||
calling the `json_serializer<ValueType>` `from_json()` method.
|
calling the [`json_serializer<ValueType>`](json_serializer.md) `from_json()` method.
|
||||||
|
|
||||||
The function is equivalent to executing
|
The function is equivalent to executing
|
||||||
```cpp
|
```cpp
|
||||||
@@ -21,6 +21,10 @@ This overload is chosen if:
|
|||||||
- `ValueType` is not `basic_json`,
|
- `ValueType` is not `basic_json`,
|
||||||
- `json_serializer<ValueType>` has a `from_json()` method of the form `void from_json(const basic_json&, ValueType&)`
|
- `json_serializer<ValueType>` has a `from_json()` method of the form `void from_json(const basic_json&, ValueType&)`
|
||||||
|
|
||||||
|
`v` must not be `const`. Passing a `const` object is a compile-time error. For types such as arithmetic types, enums,
|
||||||
|
and C arrays, the error is a `static_assert` that names the problem. For other types, the overload is not viable, and
|
||||||
|
the compiler reports that no matching `get_to` was found.
|
||||||
|
|
||||||
## Template parameters
|
## Template parameters
|
||||||
|
|
||||||
`ValueType`
|
`ValueType`
|
||||||
@@ -30,6 +34,11 @@ This overload is chosen if:
|
|||||||
|
|
||||||
the input parameter, allowing chaining calls
|
the input parameter, allowing chaining calls
|
||||||
|
|
||||||
|
## Exception safety
|
||||||
|
|
||||||
|
Depends on what `json_serializer<ValueType>` `from_json()` method throws; the JSON value itself is never modified,
|
||||||
|
since `get_to()` is a `#!cpp const` member function.
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
Depends on what `json_serializer<ValueType>` `from_json()` method throws
|
Depends on what `json_serializer<ValueType>` `from_json()` method throws
|
||||||
@@ -45,7 +54,7 @@ Depends on the `json_serializer<ValueType>::from_json()` implementation.
|
|||||||
The example below shows several conversions from JSON values to other types. There a few things to note: (1)
|
The example below shows several conversions from JSON values to other types. There a few things to note: (1)
|
||||||
Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard
|
Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard
|
||||||
`#!cpp std::vector<short>`, (3) A JSON object can be converted to C++ associative containers such as
|
`#!cpp std::vector<short>`, (3) A JSON object can be converted to C++ associative containers such as
|
||||||
`#cpp std::unordered_map<std::string, json>`.
|
`#!cpp std::map<std::string, json>`.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
--8<-- "examples/get_to.cpp"
|
--8<-- "examples/get_to.cpp"
|
||||||
@@ -67,3 +76,4 @@ Depends on the `json_serializer<ValueType>::from_json()` implementation.
|
|||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Since version 3.3.0.
|
- Since version 3.3.0.
|
||||||
|
- Added a `static_assert` with a clear message for `const` arguments in version 3.13.0.
|
||||||
|
|||||||
@@ -290,11 +290,13 @@ Access to the JSON value
|
|||||||
### Binary formats
|
### Binary formats
|
||||||
|
|
||||||
- [**from_bjdata**](from_bjdata.md) (_static_) - create a JSON value from an input in BJData format
|
- [**from_bjdata**](from_bjdata.md) (_static_) - create a JSON value from an input in BJData format
|
||||||
|
- [**from_bon8**](from_bon8.md) (_static_) - create a JSON value from an input in BON8 format
|
||||||
- [**from_bson**](from_bson.md) (_static_) - create a JSON value from an input in BSON format
|
- [**from_bson**](from_bson.md) (_static_) - create a JSON value from an input in BSON format
|
||||||
- [**from_cbor**](from_cbor.md) (_static_) - create a JSON value from an input in CBOR format
|
- [**from_cbor**](from_cbor.md) (_static_) - create a JSON value from an input in CBOR format
|
||||||
- [**from_msgpack**](from_msgpack.md) (_static_) - create a JSON value from an input in MessagePack format
|
- [**from_msgpack**](from_msgpack.md) (_static_) - create a JSON value from an input in MessagePack format
|
||||||
- [**from_ubjson**](from_ubjson.md) (_static_) - create a JSON value from an input in UBJSON format
|
- [**from_ubjson**](from_ubjson.md) (_static_) - create a JSON value from an input in UBJSON format
|
||||||
- [**to_bjdata**](to_bjdata.md) (_static_) - create a BJData serialization of a given JSON value
|
- [**to_bjdata**](to_bjdata.md) (_static_) - create a BJData serialization of a given JSON value
|
||||||
|
- [**to_bon8**](to_bon8.md) (_static_) - create a BON8 serialization of a given JSON value
|
||||||
- [**to_bson**](to_bson.md) (_static_) - create a BSON serialization of a given JSON value
|
- [**to_bson**](to_bson.md) (_static_) - create a BSON serialization of a given JSON value
|
||||||
- [**to_cbor**](to_cbor.md) (_static_) - create a CBOR serialization of a given JSON value
|
- [**to_cbor**](to_cbor.md) (_static_) - create a CBOR serialization of a given JSON value
|
||||||
- [**to_msgpack**](to_msgpack.md) (_static_) - create a MessagePack serialization of a given JSON value
|
- [**to_msgpack**](to_msgpack.md) (_static_) - create a MessagePack serialization of a given JSON value
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ enum class input_format_t {
|
|||||||
msgpack,
|
msgpack,
|
||||||
ubjson,
|
ubjson,
|
||||||
bson,
|
bson,
|
||||||
bjdata
|
bjdata,
|
||||||
|
bon8
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -31,6 +32,9 @@ bson
|
|||||||
bjdata
|
bjdata
|
||||||
: BJData (Binary JData)
|
: BJData (Binary JData)
|
||||||
|
|
||||||
|
bon8
|
||||||
|
: BON8 (Binary Object Notation 8)
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example
|
||||||
@@ -47,6 +51,11 @@ bjdata
|
|||||||
--8<-- "examples/sax_parse__binary.output"
|
--8<-- "examples/sax_parse__binary.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [sax_parse](sax_parse.md) generic SAX parse interface, taking an `input_format_t` to select the input format
|
||||||
|
- [cbor_tag_handler_t](cbor_tag_handler_t.md) configures how CBOR tags are treated while parsing
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 3.2.0.
|
- Added in version 3.2.0.
|
||||||
|
|||||||
@@ -109,11 +109,11 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
2. Linear in `cnt` plus linear in the distance between `pos` and end of the container.
|
2. Linear in `cnt` plus linear in the distance between `pos` and end of the container.
|
||||||
3. Linear in `#!cpp std::distance(first, last)` plus linear in the distance between `pos` and end of the container.
|
3. Linear in `#!cpp std::distance(first, last)` plus linear in the distance between `pos` and end of the container.
|
||||||
4. Linear in `ilist.size()` plus linear in the distance between `pos` and end of the container.
|
4. Linear in `ilist.size()` plus linear in the distance between `pos` and end of the container.
|
||||||
5. Logarithmic: `O(N*log(size() + N))`, where `N` is the number of elements to insert.
|
5. `O(N*log(size() + N))`, where `N` is the number of elements to insert.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example "Example (1): insert element into array"
|
??? example "Example: (1) insert element into array"
|
||||||
|
|
||||||
The example shows how `insert()` is used.
|
The example shows how `insert()` is used.
|
||||||
|
|
||||||
@@ -127,7 +127,7 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
--8<-- "examples/insert.output"
|
--8<-- "examples/insert.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Example (2): insert copies of element into array"
|
??? example "Example: (2) insert copies of element into array"
|
||||||
|
|
||||||
The example shows how `insert()` is used.
|
The example shows how `insert()` is used.
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
--8<-- "examples/insert__count.output"
|
--8<-- "examples/insert__count.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Example (3): insert a range of elements into an array"
|
??? example "Example: (3) insert a range of elements into an array"
|
||||||
|
|
||||||
The example shows how `insert()` is used.
|
The example shows how `insert()` is used.
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
--8<-- "examples/insert__range.output"
|
--8<-- "examples/insert__range.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Example (4): insert elements from an initializer list into an array"
|
??? example "Example: (4) insert elements from an initializer list into an array"
|
||||||
|
|
||||||
The example shows how `insert()` is used.
|
The example shows how `insert()` is used.
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
--8<-- "examples/insert__ilist.output"
|
--8<-- "examples/insert__ilist.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Example (5): insert a range of elements into an object"
|
??? example "Example: (5) insert a range of elements into an object"
|
||||||
|
|
||||||
The example shows how `insert()` is used.
|
The example shows how `insert()` is used.
|
||||||
|
|
||||||
@@ -195,5 +195,7 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
1. Added in version 1.0.0.
|
1. Added in version 1.0.0.
|
||||||
2. Added in version 1.0.0.
|
2. Added in version 1.0.0.
|
||||||
3. Added in version 1.0.0.
|
3. Added in version 1.0.0.
|
||||||
4. Added in version 1.0.0.
|
4. Added in version 1.0.0. Fixed in version 3.13.0 to copy the values before inserting; before, an `ilist` that
|
||||||
|
referred to elements of the array being inserted into could insert wrong values, because the range insert could
|
||||||
|
move from or shift an element before it was copied.
|
||||||
5. Added in version 3.0.0.
|
5. Added in version 3.0.0.
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ Constant.
|
|||||||
--8<-- "examples/is_array.output"
|
--8<-- "examples/is_array.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [is_object](is_object.md) checks whether the JSON value is an object
|
||||||
|
- [is_structured](is_structured.md) checks whether the JSON value is structured (array or object)
|
||||||
|
- [type](type.md) returns the type of the JSON value
|
||||||
|
- [array_t](array_t.md) the type used to store JSON arrays
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -34,6 +34,12 @@ Constant.
|
|||||||
--8<-- "examples/is_binary.output"
|
--8<-- "examples/is_binary.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [is_primitive](is_primitive.md) checks whether the JSON value is primitive
|
||||||
|
- [binary_t](binary_t.md) the type used to store binary values
|
||||||
|
- [get_binary](get_binary.md) returns a reference to the stored binary value
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 3.8.0.
|
- Added in version 3.8.0.
|
||||||
|
|||||||
@@ -34,6 +34,11 @@ Constant.
|
|||||||
--8<-- "examples/is_boolean.output"
|
--8<-- "examples/is_boolean.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [boolean_t](boolean_t.md) the type used to store JSON booleans
|
||||||
|
- [is_primitive](is_primitive.md) checks whether the JSON value is primitive
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ with `allow_exceptions` set to `#!cpp false`: a parse error then yields a discar
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example "Example: `is_discarded()` for ordinary JSON values"
|
||||||
|
|
||||||
The following code exemplifies `is_discarded()` for all JSON types.
|
The following code exemplifies `is_discarded()` for all JSON types.
|
||||||
|
|
||||||
@@ -69,6 +69,22 @@ with `allow_exceptions` set to `#!cpp false`: a parse error then yields a discar
|
|||||||
--8<-- "examples/is_discarded.output"
|
--8<-- "examples/is_discarded.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? example "Example: discarded values from parsing"
|
||||||
|
|
||||||
|
The following code shows the two situations in which a discarded value can be observed: parsing invalid JSON with
|
||||||
|
`allow_exceptions` set to `#!cpp false`, and a parser callback that discards the top-level value (which is replaced
|
||||||
|
by `#!json null` and therefore does *not* remain discarded).
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
--8<-- "examples/is_discarded__parse.cpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```json
|
||||||
|
--8<-- "examples/is_discarded__parse.output"
|
||||||
|
```
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ Constant.
|
|||||||
--8<-- "examples/is_null.output"
|
--8<-- "examples/is_null.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [is_array](is_array.md) checks whether the JSON value is an array
|
||||||
|
- [is_object](is_object.md) checks whether the JSON value is an object
|
||||||
|
- [type](type.md) returns the type of the JSON value
|
||||||
|
- [value_t](value_t.md) the enumeration of JSON types
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -34,6 +34,13 @@ Constant.
|
|||||||
--8<-- "examples/is_object.output"
|
--8<-- "examples/is_object.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [is_array](is_array.md) checks whether the JSON value is an array
|
||||||
|
- [is_structured](is_structured.md) checks whether the JSON value is structured (array or object)
|
||||||
|
- [type](type.md) returns the type of the JSON value
|
||||||
|
- [object_t](object_t.md) the type used to store JSON objects
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -34,6 +34,12 @@ Constant.
|
|||||||
--8<-- "examples/is_string.output"
|
--8<-- "examples/is_string.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [is_primitive](is_primitive.md) checks whether the JSON value is primitive
|
||||||
|
- [type](type.md) returns the type of the JSON value
|
||||||
|
- [string_t](string_t.md) the type used to store JSON strings
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -114,3 +114,5 @@ When iterating over an array, `key()` will return the index of the element as st
|
|||||||
|
|
||||||
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
function.
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#miscellaneous-functions) for how to update existing code.
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ Examples of such functionality might be metadata, additional member functions (e
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
#### Default type
|
### Default type
|
||||||
|
|
||||||
The default value for `CustomBaseClass` is `void`. In this case, an
|
The default value for `CustomBaseClass` is `void`. In this case, an
|
||||||
[empty base class](https://en.cppreference.com/w/cpp/language/ebo) is used and no additional functionality is injected.
|
[empty base class](https://en.cppreference.com/w/cpp/language/ebo) is used and no additional functionality is injected.
|
||||||
|
|
||||||
#### Limitations
|
### Limitations
|
||||||
|
|
||||||
The type `CustomBaseClass` has to be a default-constructible, non-`final` class.
|
The type `CustomBaseClass` has to be a default-constructible, non-`final` class.
|
||||||
`basic_json` only supports copy/move construction/assignment if `CustomBaseClass` does so as well.
|
`basic_json` only supports copy/move construction/assignment if `CustomBaseClass` does so as well.
|
||||||
@@ -43,6 +43,10 @@ A `CustomBaseClass` with non-static data members forfeits `basic_json`'s
|
|||||||
--8<-- "examples/json_base_class_t.output"
|
--8<-- "examples/json_base_class_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [Template Parameter Requirements](../../features/types/template_parameters.md#custombaseclass) - the requirements for `CustomBaseClass`
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 3.12.0.
|
- Added in version 3.12.0.
|
||||||
|
|||||||
@@ -15,11 +15,11 @@ using json_serializer = JSONSerializer<T, SFINAE>;
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
#### Default type
|
### Default type
|
||||||
|
|
||||||
The default values for `json_serializer` is [`adl_serializer`](../adl_serializer/index.md).
|
The default values for `json_serializer` is [`adl_serializer`](../adl_serializer/index.md).
|
||||||
|
|
||||||
#### Requirements
|
### Requirements
|
||||||
|
|
||||||
A custom serializer must provide `#!cpp static void to_json(basic_json&, T)` for every type it serializes, and either
|
A custom serializer must provide `#!cpp static void to_json(basic_json&, T)` for every type it serializes, and either
|
||||||
`#!cpp static void from_json(const basic_json&, T&)` or `#!cpp static T from_json(const basic_json&)` for every type it
|
`#!cpp static void from_json(const basic_json&, T&)` or `#!cpp static T from_json(const basic_json&)` for every type it
|
||||||
@@ -42,6 +42,13 @@ deserializes. See [Template Parameter Requirements](../../features/types/templat
|
|||||||
--8<-- "examples/from_json__non_default_constructible.output"
|
--8<-- "examples/from_json__non_default_constructible.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [adl_serializer](../adl_serializer/index.md) the default `json_serializer`
|
||||||
|
- [get](get.md) explicit type conversion using the `json_serializer`'s `from_json()` method
|
||||||
|
- [get_to](get_to.md) explicit type conversion into a variable using the `json_serializer`'s `from_json()` method
|
||||||
|
- [Arbitrary Type Conversions](../../features/arbitrary_types.md) - the article on converting between JSON values and arbitrary types
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Since version 2.0.0.
|
- Since version 2.0.0.
|
||||||
|
|||||||
@@ -54,6 +54,12 @@ string elements the JSON value can store which is `1`.
|
|||||||
|
|
||||||
Note the output is platform-dependent.
|
Note the output is platform-dependent.
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [size](size.md) returns the number of elements
|
||||||
|
- [array_t](array_t.md) the type used to store JSON arrays
|
||||||
|
- [object_t](object_t.md) the type used to store JSON objects
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -33,6 +33,10 @@ Thereby, `Target` is the current object; that is, the patch is applied to the cu
|
|||||||
`apply_patch` (in)
|
`apply_patch` (in)
|
||||||
: the patch to apply
|
: the patch to apply
|
||||||
|
|
||||||
|
## Exception safety
|
||||||
|
|
||||||
|
Basic guarantee: if an exception is thrown during the operation, the JSON value may be partially modified.
|
||||||
|
|
||||||
## Complexity
|
## Complexity
|
||||||
|
|
||||||
Linear in the lengths of `apply_patch`.
|
Linear in the lengths of `apply_patch`.
|
||||||
|
|||||||
@@ -32,18 +32,18 @@ type to use.
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
#### Default type
|
### Default type
|
||||||
|
|
||||||
With the default values for `NumberFloatType` (`double`), the default value for `number_float_t` is `#!cpp double`.
|
With the default values for `NumberFloatType` (`double`), the default value for `number_float_t` is `#!cpp double`.
|
||||||
|
|
||||||
#### Default behavior
|
### Default behavior
|
||||||
|
|
||||||
- The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in floating-point literals will
|
- The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in floating-point literals will
|
||||||
be ignored. Internally, the value will be stored as a decimal number. For instance, the C++ floating-point literal
|
be ignored. Internally, the value will be stored as a decimal number. For instance, the C++ floating-point literal
|
||||||
`01.2` will be serialized to `1.2`. During deserialization, leading zeros yield an error.
|
`01.2` will be serialized to `1.2`. During deserialization, leading zeros yield an error.
|
||||||
- Not-a-number (NaN) values will be serialized to `null`.
|
- Not-a-number (NaN) values will be serialized to `null`.
|
||||||
|
|
||||||
#### Limits
|
### Limits
|
||||||
|
|
||||||
[RFC 8259](https://tools.ietf.org/html/rfc8259) states:
|
[RFC 8259](https://tools.ietf.org/html/rfc8259) states:
|
||||||
> This specification allows implementations to set limits on the range and precision of numbers accepted. Since software
|
> This specification allows implementations to set limits on the range and precision of numbers accepted. Since software
|
||||||
@@ -55,7 +55,7 @@ This implementation does exactly follow this approach, as it uses double precisi
|
|||||||
smaller than `-1.79769313486232e+308` and values greater than `1.79769313486232e+308` will be stored as NaN internally
|
smaller than `-1.79769313486232e+308` and values greater than `1.79769313486232e+308` will be stored as NaN internally
|
||||||
and be serialized to `null`.
|
and be serialized to `null`.
|
||||||
|
|
||||||
#### Storage
|
### Storage
|
||||||
|
|
||||||
Floating-point number values are stored directly inside a `basic_json` type.
|
Floating-point number values are stored directly inside a `basic_json` type.
|
||||||
|
|
||||||
@@ -75,6 +75,13 @@ Floating-point number values are stored directly inside a `basic_json` type.
|
|||||||
--8<-- "examples/number_float_t.output"
|
--8<-- "examples/number_float_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [number_integer_t](number_integer_t.md) the type used to store JSON integer numbers
|
||||||
|
- [number_unsigned_t](number_unsigned_t.md) the type used to store JSON unsigned integer numbers
|
||||||
|
- [is_number_float](is_number_float.md) checks whether the JSON value is a floating-point number
|
||||||
|
- [Number Handling](../../features/types/number_handling.md) - the article on number handling
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -29,18 +29,18 @@ to use.
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
#### Default type
|
### Default type
|
||||||
|
|
||||||
With the default values for `NumberIntegerType` (`std::int64_t`), the default value for `number_integer_t` is
|
With the default values for `NumberIntegerType` (`std::int64_t`), the default value for `number_integer_t` is
|
||||||
`#!cpp std::int64_t`.
|
`#!cpp std::int64_t`.
|
||||||
|
|
||||||
#### Default behavior
|
### Default behavior
|
||||||
|
|
||||||
- The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an
|
- The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an
|
||||||
interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++
|
interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++
|
||||||
integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error.
|
integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error.
|
||||||
|
|
||||||
#### Limits
|
### Limits
|
||||||
|
|
||||||
[RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
|
[RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
|
||||||
> An implementation may set limits on the range and precision of numbers.
|
> An implementation may set limits on the range and precision of numbers.
|
||||||
@@ -57,7 +57,7 @@ will automatically be stored as [`number_unsigned_t`](number_unsigned_t.md) or [
|
|||||||
As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is
|
As this range is a subrange of the exactly supported range [INT64_MIN, INT64_MAX], this class's integer type is
|
||||||
interoperable.
|
interoperable.
|
||||||
|
|
||||||
#### Storage
|
### Storage
|
||||||
|
|
||||||
Integer number values are stored directly inside a `basic_json` type.
|
Integer number values are stored directly inside a `basic_json` type.
|
||||||
|
|
||||||
@@ -77,6 +77,13 @@ Integer number values are stored directly inside a `basic_json` type.
|
|||||||
--8<-- "examples/number_integer_t.output"
|
--8<-- "examples/number_integer_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [number_unsigned_t](number_unsigned_t.md) the type used to store JSON unsigned integer numbers
|
||||||
|
- [number_float_t](number_float_t.md) the type used to store JSON floating-point numbers
|
||||||
|
- [is_number_integer](is_number_integer.md) checks whether the JSON value is a signed integer number
|
||||||
|
- [Number Handling](../../features/types/number_handling.md) - the article on number handling
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -30,18 +30,18 @@ the type to use.
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
#### Default type
|
### Default type
|
||||||
|
|
||||||
With the default values for `NumberUnsignedType` (`std::uint64_t`), the default value for `number_unsigned_t` is
|
With the default values for `NumberUnsignedType` (`std::uint64_t`), the default value for `number_unsigned_t` is
|
||||||
`#!cpp std::uint64_t`.
|
`#!cpp std::uint64_t`.
|
||||||
|
|
||||||
#### Default behavior
|
### Default behavior
|
||||||
|
|
||||||
- The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an
|
- The restrictions about leading zeros are not enforced in C++. Instead, leading zeros in integer literals lead to an
|
||||||
interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++
|
interpretation as an octal number. Internally, the value will be stored as a decimal number. For instance, the C++
|
||||||
integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error.
|
integer literal `010` will be serialized to `8`. During deserialization, leading zeros yield an error.
|
||||||
|
|
||||||
#### Limits
|
### Limits
|
||||||
|
|
||||||
[RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
|
[RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
|
||||||
> An implementation may set limits on the range and precision of numbers.
|
> An implementation may set limits on the range and precision of numbers.
|
||||||
@@ -58,7 +58,7 @@ as [`number_integer_t`](number_integer_t.md) or [`number_float_t`](number_float_
|
|||||||
As this range is a subrange (when considered in conjunction with the `number_integer_t` type) of the exactly supported
|
As this range is a subrange (when considered in conjunction with the `number_integer_t` type) of the exactly supported
|
||||||
range [0, UINT64_MAX], this class's integer type is interoperable.
|
range [0, UINT64_MAX], this class's integer type is interoperable.
|
||||||
|
|
||||||
#### Storage
|
### Storage
|
||||||
|
|
||||||
Integer number values are stored directly inside a `basic_json` type.
|
Integer number values are stored directly inside a `basic_json` type.
|
||||||
|
|
||||||
@@ -78,6 +78,13 @@ Integer number values are stored directly inside a `basic_json` type.
|
|||||||
--8<-- "examples/number_unsigned_t.output"
|
--8<-- "examples/number_unsigned_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [number_integer_t](number_integer_t.md) the type used to store JSON integer numbers
|
||||||
|
- [number_float_t](number_float_t.md) the type used to store JSON floating-point numbers
|
||||||
|
- [is_number_unsigned](is_number_unsigned.md) checks whether the JSON value is an unsigned integer number
|
||||||
|
- [Number Handling](../../features/types/number_handling.md) - the article on number handling
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 2.0.0.
|
- Added in version 2.0.0.
|
||||||
|
|||||||
@@ -25,6 +25,11 @@ and [`default_object_comparator_t`](default_object_comparator_t.md) otherwise.
|
|||||||
--8<-- "examples/object_comparator_t.output"
|
--8<-- "examples/object_comparator_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [object_t](object_t.md) the type used to store JSON objects
|
||||||
|
- [default_object_comparator_t](default_object_comparator_t.md) the fallback comparator used when `object_t` has no `key_compare` member type
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 3.0.0.
|
- Added in version 3.0.0.
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ To store objects in C++, a type is defined by the template parameters described
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
#### Default type
|
### Default type
|
||||||
|
|
||||||
With the default values for `ObjectType` (`std::map`), `StringType` (`std::string`), and `AllocatorType`
|
With the default values for `ObjectType` (`std::map`), `StringType` (`std::string`), and `AllocatorType`
|
||||||
(`std::allocator`), the default value for `object_t` is:
|
(`std::allocator`), the default value for `object_t` is:
|
||||||
@@ -58,7 +58,7 @@ std::map<
|
|||||||
|
|
||||||
See [`default_object_comparator_t`](default_object_comparator_t.md) for more information.
|
See [`default_object_comparator_t`](default_object_comparator_t.md) for more information.
|
||||||
|
|
||||||
#### Behavior
|
### Behavior
|
||||||
|
|
||||||
The choice of `object_t` influences the behavior of the JSON class. With the default type, objects have the following
|
The choice of `object_t` influences the behavior of the JSON class. With the default type, objects have the following
|
||||||
behavior:
|
behavior:
|
||||||
@@ -76,7 +76,7 @@ behavior:
|
|||||||
that they will not be affected by these differences. For instance, `#!json {"b": 1, "a": 2}` and
|
that they will not be affected by these differences. For instance, `#!json {"b": 1, "a": 2}` and
|
||||||
`#!json {"a": 2, "b": 1}` will be treated as equal.
|
`#!json {"a": 2, "b": 1}` will be treated as equal.
|
||||||
|
|
||||||
#### Limits
|
### Limits
|
||||||
|
|
||||||
[RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
|
[RFC 8259](https://tools.ietf.org/html/rfc8259) specifies:
|
||||||
> An implementation may set limits on the maximum depth of nesting.
|
> An implementation may set limits on the maximum depth of nesting.
|
||||||
@@ -85,12 +85,12 @@ In this class, the object's limit of nesting is not explicitly constrained. Howe
|
|||||||
introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the
|
introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the
|
||||||
[`max_size`](max_size.md) function of a JSON object.
|
[`max_size`](max_size.md) function of a JSON object.
|
||||||
|
|
||||||
#### Storage
|
### Storage
|
||||||
|
|
||||||
Objects are stored as pointers in a `basic_json` type. That is, for any access to object values, a pointer of type
|
Objects are stored as pointers in a `basic_json` type. That is, for any access to object values, a pointer of type
|
||||||
`object_t*` must be dereferenced.
|
`object_t*` must be dereferenced.
|
||||||
|
|
||||||
#### Object key order
|
### Object key order
|
||||||
|
|
||||||
The order name/value pairs are added to the object are *not* preserved by the library. Therefore, iterating an object
|
The order name/value pairs are added to the object are *not* preserved by the library. Therefore, iterating an object
|
||||||
may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in
|
may return name/value pairs in a different order than they were originally stored. In fact, keys will be traversed in
|
||||||
@@ -98,10 +98,10 @@ alphabetical order as `std::map` with `std::less` is used by default. Please not
|
|||||||
[RFC 8259](https://tools.ietf.org/html/rfc8259), because any order implements the specified "unordered" nature of JSON
|
[RFC 8259](https://tools.ietf.org/html/rfc8259), because any order implements the specified "unordered" nature of JSON
|
||||||
objects.
|
objects.
|
||||||
|
|
||||||
#### Cross-`basic_json` conversion requirements
|
### Cross-`basic_json` conversion requirements
|
||||||
|
|
||||||
When converting an object from one `basic_json` specialization to another via the
|
When converting an object from one `basic_json` specialization to another via the
|
||||||
[converting constructor](basic_json.md#overload-4), the target `object_t`'s `key_type` must be
|
[converting constructor](basic_json.md) (overload 4), the target `object_t`'s `key_type` must be
|
||||||
directly constructible from the source `basic_json`'s `string_t` type (or more generally, from the
|
directly constructible from the source `basic_json`'s `string_t` type (or more generally, from the
|
||||||
source object's key type). If this requirement is not met, the conversion does not fail; instead,
|
source object's key type). If this requirement is not met, the conversion does not fail; instead,
|
||||||
the object is silently converted as an array of key-value pairs, which is incorrect. See
|
the object is silently converted as an array of key-value pairs, which is incorrect. See
|
||||||
@@ -123,6 +123,13 @@ the object is silently converted as an array of key-value pairs, which is incorr
|
|||||||
--8<-- "examples/object_t.output"
|
--8<-- "examples/object_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [array_t](array_t.md) the type used to store JSON arrays
|
||||||
|
- [string_t](string_t.md) the type used to store JSON strings
|
||||||
|
- [object_comparator_t](object_comparator_t.md) the comparator used to order object keys
|
||||||
|
- [Object Order](../../features/object_order.md) - the article on object key ordering
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -48,6 +48,12 @@ invalidates all iterators and all references.
|
|||||||
|
|
||||||
`#!cpp *this`
|
`#!cpp *this`
|
||||||
|
|
||||||
|
## Exception safety
|
||||||
|
|
||||||
|
Strong guarantee: if an exception is thrown, there are no changes to any JSON value. As an exception, a `#!json null`
|
||||||
|
value is converted to an empty array or object before the element is added and keeps that type if adding the element
|
||||||
|
throws.
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
1. Throws [`type_error.308`](../../home/exceptions.md#jsonexceptiontype_error308) when called on a type other than
|
1. Throws [`type_error.308`](../../home/exceptions.md#jsonexceptiontype_error308) when called on a type other than
|
||||||
|
|||||||
@@ -70,6 +70,9 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
1. The function can throw the following exceptions:
|
1. The function can throw the following exceptions:
|
||||||
- Throws [`type_error.305`](../../home/exceptions.md#jsonexceptiontype_error305) if the JSON value is not an array
|
- Throws [`type_error.305`](../../home/exceptions.md#jsonexceptiontype_error305) if the JSON value is not an array
|
||||||
or null; in that case, using the `[]` operator with an index makes no sense.
|
or null; in that case, using the `[]` operator with an index makes no sense.
|
||||||
|
- Throws `#!cpp std::length_error` if `idx` equals the maximum value of `size_type`; the array is left unchanged.
|
||||||
|
(This is the one index for which growing the array to hold it cannot be expressed as a `size_type` size, the same
|
||||||
|
way an oversized [`resize`](https://en.cppreference.com/w/cpp/container/vector/resize) throws.)
|
||||||
2. The function can throw the following exceptions:
|
2. The function can throw the following exceptions:
|
||||||
- Throws [`type_error.305`](../../home/exceptions.md#jsonexceptiontype_error305) if the JSON value is not an object
|
- Throws [`type_error.305`](../../home/exceptions.md#jsonexceptiontype_error305) if the JSON value is not an object
|
||||||
or null; in that case, using the `[]` operator with a key makes no sense.
|
or null; in that case, using the `[]` operator with a key makes no sense.
|
||||||
@@ -133,6 +136,18 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
while `/foo/one/one/one` creates nested objects. This is not specified by the JSON Pointer RFC; it is
|
while `/foo/one/one/one` creates nested objects. This is not specified by the JSON Pointer RFC; it is
|
||||||
this library's own, intentional disambiguation rule. See also [JSON Pointer](../../features/json_pointer.md).
|
this library's own, intentional disambiguation rule. See also [JSON Pointer](../../features/json_pointer.md).
|
||||||
|
|
||||||
|
!!! warning "Deprecation"
|
||||||
|
|
||||||
|
Overload (4) also accepts a [`json_pointer`](../json_pointer/index.md) whose template argument is a `basic_json`
|
||||||
|
specialization (e.g., `nlohmann::json_pointer<nlohmann::json>`) instead of a string type. This is deprecated since
|
||||||
|
version 3.11.0 and will be removed in a future major version; use `basic_json::json_pointer` (for `json`,
|
||||||
|
`nlohmann::json_pointer<std::string>`) instead.
|
||||||
|
|
||||||
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#json-pointers) for how to update existing code.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example "Example: (1) access specified array element"
|
??? example "Example: (1) access specified array element"
|
||||||
@@ -257,7 +272,8 @@ Strong exception safety: if an exception occurs, the original value stays intact
|
|||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
1. Added in version 1.0.0.
|
1. Added in version 1.0.0. Fixed in version 3.13.0 to throw `#!cpp std::length_error` instead of emptying the array and
|
||||||
|
accessing it out of bounds when `idx` equals the maximum value of `size_type`.
|
||||||
2. Added in version 1.0.0. Added overloads for `T* key` in version 1.1.0. Removed overloads for `T* key` (replaced by 3)
|
2. Added in version 1.0.0. Added overloads for `T* key` in version 1.1.0. Removed overloads for `T* key` (replaced by 3)
|
||||||
in version 3.11.0.
|
in version 3.11.0.
|
||||||
3. Added in version 3.11.0. Fixed in version 3.13.0 to consistently accept `std::string_view`-convertible keys, as
|
3. Added in version 3.11.0. Fixed in version 3.13.0 to consistently accept `std::string_view`-convertible keys, as
|
||||||
|
|||||||
@@ -17,6 +17,11 @@ Implicit type conversion between the JSON value and a compatible value. The call
|
|||||||
|
|
||||||
copy of the JSON value, converted to `ValueType`
|
copy of the JSON value, converted to `ValueType`
|
||||||
|
|
||||||
|
## Exception safety
|
||||||
|
|
||||||
|
Depends on what `json_serializer<ValueType>` `from_json()` method throws; the JSON value itself is never modified,
|
||||||
|
since `#!cpp operator ValueType()` is a `#!cpp const` member function that only calls [`get()`](get.md).
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
Depends on what `json_serializer<ValueType>` `from_json()` method throws
|
Depends on what `json_serializer<ValueType>` `from_json()` method throws
|
||||||
@@ -56,6 +61,8 @@ Linear in the size of the JSON value.
|
|||||||
[`JSON_USE_IMPLICIT_CONVERSIONS`](../macros/json_use_implicit_conversions.md) to `0` and replace any implicit
|
[`JSON_USE_IMPLICIT_CONVERSIONS`](../macros/json_use_implicit_conversions.md) to `0` and replace any implicit
|
||||||
conversions with calls to [`get`](../basic_json/get.md).
|
conversions with calls to [`get`](../basic_json/get.md).
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#replace-implicit-conversions) for how to update existing code.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example
|
||||||
@@ -63,7 +70,7 @@ Linear in the size of the JSON value.
|
|||||||
The example below shows several conversions from JSON values to other types. There are a few things to note: (1)
|
The example below shows several conversions from JSON values to other types. There are a few things to note: (1)
|
||||||
Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard
|
Floating-point numbers can be converted to integers, (2) A JSON array can be converted to a standard
|
||||||
`std::vector<short>`, (3) A JSON object can be converted to C++ associative containers such as
|
`std::vector<short>`, (3) A JSON object can be converted to C++ associative containers such as
|
||||||
`std::unordered_map<std::string, json>`.
|
`std::map<std::string, json>`.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
--8<-- "examples/operator__ValueType.cpp"
|
--8<-- "examples/operator__ValueType.cpp"
|
||||||
|
|||||||
@@ -134,7 +134,7 @@ Linear.
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example "Example: (1) compare JSON values"
|
||||||
|
|
||||||
The example demonstrates comparing several JSON types.
|
The example demonstrates comparing several JSON types.
|
||||||
|
|
||||||
@@ -148,7 +148,7 @@ Linear.
|
|||||||
--8<-- "examples/operator__equal.output"
|
--8<-- "examples/operator__equal.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example
|
??? example "Example: (2) compare JSON values with `#!cpp nullptr`"
|
||||||
|
|
||||||
The example demonstrates comparing several JSON types against the null pointer (JSON `#!json null`).
|
The example demonstrates comparing several JSON types against the null pointer (JSON `#!json null`).
|
||||||
|
|
||||||
|
|||||||
@@ -60,6 +60,16 @@ Linear.
|
|||||||
Since C++20 overload resolution will consider the _rewritten candidate_ generated from
|
Since C++20 overload resolution will consider the _rewritten candidate_ generated from
|
||||||
[`operator<=>`](operator_spaceship.md).
|
[`operator<=>`](operator_spaceship.md).
|
||||||
|
|
||||||
|
!!! warning "Deprecation"
|
||||||
|
|
||||||
|
If [`JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON`](../macros/json_use_legacy_discarded_value_comparison.md) is
|
||||||
|
defined to `1`, the library declares a member `#!cpp bool operator>=(const_reference rhs) const noexcept` in
|
||||||
|
C++20 mode to emulate the legacy comparison of discarded values. This member is deprecated since version 3.11.0,
|
||||||
|
together with the legacy comparison behavior.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#miscellaneous-functions) for how to update existing
|
||||||
|
code.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example
|
||||||
|
|||||||
@@ -61,6 +61,16 @@ Linear.
|
|||||||
Since C++20 overload resolution will consider the _rewritten candidate_ generated from
|
Since C++20 overload resolution will consider the _rewritten candidate_ generated from
|
||||||
[`operator<=>`](operator_spaceship.md).
|
[`operator<=>`](operator_spaceship.md).
|
||||||
|
|
||||||
|
!!! warning "Deprecation"
|
||||||
|
|
||||||
|
If [`JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON`](../macros/json_use_legacy_discarded_value_comparison.md) is
|
||||||
|
defined to `1`, the library declares a member `#!cpp bool operator<=(const_reference rhs) const noexcept` in
|
||||||
|
C++20 mode to emulate the legacy comparison of discarded values. This member is deprecated since version 3.11.0,
|
||||||
|
together with the legacy comparison behavior.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#miscellaneous-functions) for how to update existing
|
||||||
|
code.
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example
|
||||||
|
|||||||
@@ -9,17 +9,9 @@ bool operator!=(const_reference lhs, const ScalarType rhs) noexcept; // (2)
|
|||||||
|
|
||||||
template<typename ScalarType>
|
template<typename ScalarType>
|
||||||
bool operator!=(ScalarType lhs, const const_reference rhs) noexcept; // (2)
|
bool operator!=(ScalarType lhs, const const_reference rhs) noexcept; // (2)
|
||||||
|
|
||||||
// since C++20
|
|
||||||
class basic_json {
|
|
||||||
bool operator!=(const_reference rhs) const noexcept; // (1)
|
|
||||||
|
|
||||||
template<typename ScalarType>
|
|
||||||
bool operator!=(ScalarType rhs) const noexcept; // (2)
|
|
||||||
};
|
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Compares two JSON values for inequality. Returns `#!cpp !(lhs == rhs)` (until C++20) or `#!cpp !(*this == rhs)` (since C++20).
|
1. Compares two JSON values for inequality. Returns `#!cpp !(lhs == rhs)`.
|
||||||
- This means the comparison is simply the logical negation of `operator==`, including for special values like `NaN` and `discarded`.
|
- This means the comparison is simply the logical negation of `operator==`, including for special values like `NaN` and `discarded`.
|
||||||
|
|
||||||
2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON
|
2. Compares a JSON value and a scalar or a scalar and a JSON value for inequality by converting the scalar to a JSON
|
||||||
@@ -52,6 +44,11 @@ Linear.
|
|||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
|
!!! note "C++20"
|
||||||
|
|
||||||
|
Since C++20, `basic_json` declares no `operator!=`. The compiler rewrites `#!cpp a != b` as `#!cpp !(a == b)`
|
||||||
|
using [`operator==`](operator_eq.md), so the result is the same as described above.
|
||||||
|
|
||||||
!!! note "Comparing `NaN` and `discarded`"
|
!!! note "Comparing `NaN` and `discarded`"
|
||||||
|
|
||||||
Since `operator!=` is defined as `!(a == b)`, the behavior for special values follows that of `operator==`:
|
Since `operator!=` is defined as `!(a == b)`, the behavior for special values follows that of `operator==`:
|
||||||
@@ -61,7 +58,7 @@ Linear.
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example "Example: (1) compare JSON values"
|
||||||
|
|
||||||
The example demonstrates comparing several JSON types.
|
The example demonstrates comparing several JSON types.
|
||||||
|
|
||||||
@@ -75,7 +72,7 @@ Linear.
|
|||||||
--8<-- "examples/operator__notequal.output"
|
--8<-- "examples/operator__notequal.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example
|
??? example "Example: (2) compare JSON values with `#!cpp nullptr`"
|
||||||
|
|
||||||
The example demonstrates comparing several JSON types against the null pointer (JSON `#!json null`).
|
The example demonstrates comparing several JSON types against the null pointer (JSON `#!json null`).
|
||||||
|
|
||||||
@@ -89,9 +86,15 @@ Linear.
|
|||||||
--8<-- "examples/operator__notequal__nullptr_t.output"
|
--8<-- "examples/operator__notequal__nullptr_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [operator==](operator_eq.md) comparison: equal
|
||||||
|
- [operator<=>](operator_spaceship.md) comparison: 3-way (C++20)
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
1. Added in version 1.0.0. Added C++20 member functions in version 3.11.0. Changed in version 3.13.0 to remove
|
1. Added in version 1.0.0. Added a C++20 member function in version 3.11.0. Changed in version 3.13.0 to remove
|
||||||
special-casing for `NaN` and `discarded` values; `operator!=` now consistently means `!(a == b)`.
|
special-casing for `NaN` and `discarded` values; `operator!=` now consistently means `!(a == b)`. Removed the C++20
|
||||||
2. Added in version 1.0.0. Added C++20 member functions in version 3.11.0. Changed in version 3.13.0 to remove
|
member function in version 3.13.0; since C++20, the compiler rewrites `a != b` using `operator==`.
|
||||||
special-casing for `NaN` and `discarded` values; `operator!=` now consistently means `!(a == b)`.
|
2. Added in version 1.0.0. Changed in version 3.13.0 to remove special-casing for `NaN` and `discarded` values;
|
||||||
|
`operator!=` now consistently means `!(a == b)`. Since C++20, the compiler rewrites `a != b` using `operator==`.
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ Constant.
|
|||||||
--8<-- "examples/operator__value_t.output"
|
--8<-- "examples/operator__value_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [type](type.md) named member function equivalent to this implicit conversion operator
|
||||||
|
- [value_t](value_t.md) the enumeration of JSON types
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -88,7 +88,12 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
|||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
- Throws [`parse_error.101`](../../home/exceptions.md#jsonexceptionparse_error101) in case of an unexpected token, or
|
- Throws [`parse_error.101`](../../home/exceptions.md#jsonexceptionparse_error101) in case of an unexpected token, or
|
||||||
empty input like a null `FILE*` or `char*` pointer.
|
empty input like a null `FILE*` or `char*` pointer, or an `std::istream` without a stream buffer
|
||||||
|
(`#!cpp i.rdbuf() == nullptr`, for instance `#!cpp std::istream(nullptr)`).
|
||||||
|
- If reading from an `std::istream` reaches the end of the input and `eofbit` is part of the stream's
|
||||||
|
[`exceptions()`](https://en.cppreference.com/w/cpp/io/basic_ios/exceptions) mask, the `std::ios_base::failure`
|
||||||
|
thrown by the stream itself propagates instead of a `parse_error`, the same as it would for the standard library's
|
||||||
|
own extraction operators.
|
||||||
|
|
||||||
## Complexity
|
## Complexity
|
||||||
|
|
||||||
@@ -109,7 +114,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example "Parsing from a character array"
|
??? example "Example: (1) parse from a character array"
|
||||||
|
|
||||||
The example below demonstrates the `parse()` function reading from an array.
|
The example below demonstrates the `parse()` function reading from an array.
|
||||||
|
|
||||||
@@ -123,7 +128,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
--8<-- "examples/parse__array__parser_callback_t.output"
|
--8<-- "examples/parse__array__parser_callback_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Parsing from a string"
|
??? example "Example: (1) parse from a string"
|
||||||
|
|
||||||
The example below demonstrates the `parse()` function with and without callback function.
|
The example below demonstrates the `parse()` function with and without callback function.
|
||||||
|
|
||||||
@@ -137,7 +142,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
--8<-- "examples/parse__string__parser_callback_t.output"
|
--8<-- "examples/parse__string__parser_callback_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Parsing from an input stream"
|
??? example "Example: (1) parse from an input stream"
|
||||||
|
|
||||||
The example below demonstrates the `parse()` function with and without callback function.
|
The example below demonstrates the `parse()` function with and without callback function.
|
||||||
|
|
||||||
@@ -151,7 +156,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
--8<-- "examples/parse__istream__parser_callback_t.output"
|
--8<-- "examples/parse__istream__parser_callback_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Parsing from a contiguous container"
|
??? example "Example: (1) parse from a contiguous container"
|
||||||
|
|
||||||
The example below demonstrates the `parse()` function reading from a contiguous container.
|
The example below demonstrates the `parse()` function reading from a contiguous container.
|
||||||
|
|
||||||
@@ -165,7 +170,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
--8<-- "examples/parse__contiguouscontainer__parser_callback_t.output"
|
--8<-- "examples/parse__contiguouscontainer__parser_callback_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Parsing from a non-null-terminated string"
|
??? example "Example: (2) parse from a non-null-terminated string"
|
||||||
|
|
||||||
The example below demonstrates the `parse()` function reading from a string that is not null-terminated.
|
The example below demonstrates the `parse()` function reading from a string that is not null-terminated.
|
||||||
|
|
||||||
@@ -179,7 +184,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
--8<-- "examples/parse__pointers.output"
|
--8<-- "examples/parse__pointers.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Parsing from an iterator pair"
|
??? example "Example: (2) parse from an iterator pair"
|
||||||
|
|
||||||
The example below demonstrates the `parse()` function reading from an iterator pair.
|
The example below demonstrates the `parse()` function reading from an iterator pair.
|
||||||
|
|
||||||
@@ -193,7 +198,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
--8<-- "examples/parse__iterator_pair.output"
|
--8<-- "examples/parse__iterator_pair.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Effect of `allow_exceptions` parameter"
|
??? example "Example: effect of `allow_exceptions` parameter"
|
||||||
|
|
||||||
The example below demonstrates the effect of the `allow_exceptions` parameter in the `parse()` function.
|
The example below demonstrates the effect of the `allow_exceptions` parameter in the `parse()` function.
|
||||||
|
|
||||||
@@ -207,7 +212,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
--8<-- "examples/parse__allow_exceptions.output"
|
--8<-- "examples/parse__allow_exceptions.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Effect of `ignore_comments` parameter"
|
??? example "Example: effect of `ignore_comments` parameter"
|
||||||
|
|
||||||
The example below demonstrates the effect of the `ignore_comments` parameter in the `parse()` function.
|
The example below demonstrates the effect of the `ignore_comments` parameter in the `parse()` function.
|
||||||
|
|
||||||
@@ -221,7 +226,7 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
--8<-- "examples/comments.output"
|
--8<-- "examples/comments.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example "Effect of `ignore_trailing_commas` parameter"
|
??? example "Example: effect of `ignore_trailing_commas` parameter"
|
||||||
|
|
||||||
The example below demonstrates the effect of the `ignore_trailing_commas` parameter in the `parse()` function.
|
The example below demonstrates the effect of the `ignore_trailing_commas` parameter in the `parse()` function.
|
||||||
|
|
||||||
@@ -254,6 +259,8 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
- Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0.
|
- Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0.
|
||||||
- `JSON_STRICT_NUL_HANDLING` added in version 3.13.0 to optionally reject a NUL byte in the input instead of treating
|
- `JSON_STRICT_NUL_HANDLING` added in version 3.13.0 to optionally reject a NUL byte in the input instead of treating
|
||||||
it as end of input; planned to become the default in version 4.0.0.
|
it as end of input; planned to become the default in version 4.0.0.
|
||||||
|
- Extended empty-input detection to also cover an `std::istream` without a stream buffer, and fixed a crash
|
||||||
|
(`std::terminate`) when parsing from an `std::istream` with `eofbit` in its exception mask, in version 3.13.0.
|
||||||
|
|
||||||
!!! warning "Deprecation"
|
!!! warning "Deprecation"
|
||||||
|
|
||||||
@@ -263,3 +270,5 @@ outside of a string, invalid) byte; see the [FAQ entry](../../home/faq.md#nul-by
|
|||||||
|
|
||||||
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
You should be warned by your compiler with a `-Wdeprecated-declarations` warning if you are using a deprecated
|
||||||
function.
|
function.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#parsing) for how to update existing code.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ class parse_error : public exception;
|
|||||||
```
|
```
|
||||||
|
|
||||||
The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of
|
The library throws this exception when a parse error occurs. Parse errors can occur during the deserialization of
|
||||||
JSON text, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.
|
JSON text, BJData, BON8, BSON, CBOR, MessagePack, UBJSON, as well as when using JSON Patch.
|
||||||
|
|
||||||
Member `byte` holds the byte index of the last read character in the input file (see note below).
|
Member `byte` holds the byte index of the last read character in the input file (see note below).
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,21 @@ The parser callback distinguishes the following events:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
??? example
|
||||||
|
|
||||||
|
The following code parses a small JSON text with a parser callback that reports every event together with its
|
||||||
|
depth and keeps every value (by always returning `#!cpp true`).
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
--8<-- "examples/parse_event_t.cpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```json
|
||||||
|
--8<-- "examples/parse_event_t.output"
|
||||||
|
```
|
||||||
|
|
||||||
## See also
|
## See also
|
||||||
|
|
||||||
- [parser_callback_t](parser_callback_t.md) callback function type for the parser
|
- [parser_callback_t](parser_callback_t.md) callback function type for the parser
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ the latter case, it is skipped completely, or replaced by `null` if it is the to
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example "Example: skip an object key while parsing"
|
||||||
|
|
||||||
The example below demonstrates the `parse()` function with
|
The example below demonstrates the `parse()` function with
|
||||||
and without callback function.
|
and without callback function.
|
||||||
@@ -75,7 +75,7 @@ the latter case, it is skipped completely, or replaced by `null` if it is the to
|
|||||||
--8<-- "examples/parse__string__parser_callback_t.output"
|
--8<-- "examples/parse__string__parser_callback_t.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
??? example
|
??? example "Example: how discarded values are removed"
|
||||||
|
|
||||||
The example below shows where discarded values are removed. The array and the number are discarded in different
|
The example below shows where discarded values are removed. The array and the number are discarded in different
|
||||||
ways, but in each case the parse result contains neither the value nor its key.
|
ways, but in each case the parse result contains neither the value nor its key.
|
||||||
@@ -100,3 +100,6 @@ the latter case, it is skipped completely, or replaced by `null` if it is the to
|
|||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
- Fixed in version 3.13.0 to also remove discarded values from a parent object; before, discarding an array or a value
|
- Fixed in version 3.13.0 to also remove discarded values from a parent object; before, discarding an array or a value
|
||||||
stored under an object key left a discarded member behind, which made the parse result serialize to invalid JSON.
|
stored under an object key left a discarded member behind, which made the parse result serialize to invalid JSON.
|
||||||
|
- Fixed in version 3.13.0 so that discarding an array or object at its start event also hides its content from the
|
||||||
|
callback, as documented above; before, the callback was still called for the content, and the key of every member of
|
||||||
|
a discarded object was kept in memory until the parse ended.
|
||||||
|
|||||||
@@ -26,10 +26,24 @@ Strong guarantee: if an exception is thrown, there are no changes in the JSON va
|
|||||||
- Throws [`parse_error.104`](../../home/exceptions.md#jsonexceptionparse_error104) if the JSON patch does not consist of
|
- Throws [`parse_error.104`](../../home/exceptions.md#jsonexceptionparse_error104) if the JSON patch does not consist of
|
||||||
an array of objects.
|
an array of objects.
|
||||||
- Throws [`parse_error.105`](../../home/exceptions.md#jsonexceptionparse_error105) if the JSON patch is malformed (e.g.,
|
- Throws [`parse_error.105`](../../home/exceptions.md#jsonexceptionparse_error105) if the JSON patch is malformed (e.g.,
|
||||||
mandatory attributes are missing); example: `"operation add must have member path"`.
|
mandatory attributes are missing); example: `"operation 'add' must have member 'path'"`.
|
||||||
- Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if an array index is out of range.
|
- Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if an array index is out of range.
|
||||||
|
- Throws [`parse_error.106`](../../home/exceptions.md#jsonexceptionparse_error106) if an array index in a "path" or
|
||||||
|
"from" member begins with '0'; example: `"array index '01' must not begin with '0'"`.
|
||||||
|
- Throws [`parse_error.107`](../../home/exceptions.md#jsonexceptionparse_error107) if a "path" or "from" member is not
|
||||||
|
empty and does not begin with a slash (`/`); example: `"JSON pointer must be empty or begin with '/' - was: 'a'"`.
|
||||||
|
- Throws [`parse_error.108`](../../home/exceptions.md#jsonexceptionparse_error108) if a tilde (`~`) in a "path" or
|
||||||
|
"from" member is not followed by `0` or `1`; example: `"escape character '~' must be followed with '0' or '1'"`.
|
||||||
|
- Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) if an array index in a "path" or
|
||||||
|
"from" member is not a number; example: `"array index 'foo' is not a number"`.
|
||||||
|
- Throws [`out_of_range.402`](../../home/exceptions.md#jsonexceptionout_of_range402) if the array index `-` is used
|
||||||
|
where an existing element is required (the "path" of "replace", the "from" of "move" and "copy"); example:
|
||||||
|
`"array index '-' (3) is out of range"`.
|
||||||
- Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a JSON pointer inside the patch
|
- Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a JSON pointer inside the patch
|
||||||
could not be resolved successfully in the current JSON value; example: `"key baz not found"`.
|
could not be resolved successfully in the current JSON value; example: `"key baz not found"`.
|
||||||
|
- Throws [`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) if a reference token of a JSON
|
||||||
|
pointer inside the patch cannot be resolved, e.g., `-` in a "remove" operation or `1a` for an array; example:
|
||||||
|
`"unresolved reference token '-'"`.
|
||||||
- Throws [`out_of_range.405`](../../home/exceptions.md#jsonexceptionout_of_range405) if JSON pointer has no parent
|
- Throws [`out_of_range.405`](../../home/exceptions.md#jsonexceptionout_of_range405) if JSON pointer has no parent
|
||||||
("add", "remove", "move")
|
("add", "remove", "move")
|
||||||
- Throws [`out_of_range.411`](../../home/exceptions.md#jsonexceptionout_of_range411) if an "add" operation's target
|
- Throws [`out_of_range.411`](../../home/exceptions.md#jsonexceptionout_of_range411) if an "add" operation's target
|
||||||
@@ -53,7 +67,7 @@ is thrown. In any case, the original value is not changed: the patch is applied
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example "Example: apply a JSON patch"
|
||||||
|
|
||||||
The following code shows how a JSON patch is applied to a value.
|
The following code shows how a JSON patch is applied to a value.
|
||||||
|
|
||||||
@@ -67,6 +81,21 @@ is thrown. In any case, the original value is not changed: the patch is applied
|
|||||||
--8<-- "examples/patch.output"
|
--8<-- "examples/patch.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? example "Example: out_of_range.414 exception"
|
||||||
|
|
||||||
|
The following code shows how a "move" operation whose "from" location is a proper prefix of its "path" location is
|
||||||
|
rejected, and how the original document is left unchanged because the patch is applied to a copy.
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
--8<-- "examples/patch__exception.cpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```json
|
||||||
|
--8<-- "examples/patch__exception.output"
|
||||||
|
```
|
||||||
|
|
||||||
## See also
|
## See also
|
||||||
|
|
||||||
- [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902)
|
- [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902)
|
||||||
|
|||||||
@@ -22,10 +22,24 @@ No guarantees, value may be corrupted by an unsuccessful patch operation.
|
|||||||
- Throws [`parse_error.104`](../../home/exceptions.md#jsonexceptionparse_error104) if the JSON patch does not consist of
|
- Throws [`parse_error.104`](../../home/exceptions.md#jsonexceptionparse_error104) if the JSON patch does not consist of
|
||||||
an array of objects.
|
an array of objects.
|
||||||
- Throws [`parse_error.105`](../../home/exceptions.md#jsonexceptionparse_error105) if the JSON patch is malformed (e.g.,
|
- Throws [`parse_error.105`](../../home/exceptions.md#jsonexceptionparse_error105) if the JSON patch is malformed (e.g.,
|
||||||
mandatory attributes are missing); example: `"operation add must have member path"`.
|
mandatory attributes are missing); example: `"operation 'add' must have member 'path'"`.
|
||||||
- Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if an array index is out of range.
|
- Throws [`out_of_range.401`](../../home/exceptions.md#jsonexceptionout_of_range401) if an array index is out of range.
|
||||||
|
- Throws [`parse_error.106`](../../home/exceptions.md#jsonexceptionparse_error106) if an array index in a "path" or
|
||||||
|
"from" member begins with '0'; example: `"array index '01' must not begin with '0'"`.
|
||||||
|
- Throws [`parse_error.107`](../../home/exceptions.md#jsonexceptionparse_error107) if a "path" or "from" member is not
|
||||||
|
empty and does not begin with a slash (`/`); example: `"JSON pointer must be empty or begin with '/' - was: 'a'"`.
|
||||||
|
- Throws [`parse_error.108`](../../home/exceptions.md#jsonexceptionparse_error108) if a tilde (`~`) in a "path" or
|
||||||
|
"from" member is not followed by `0` or `1`; example: `"escape character '~' must be followed with '0' or '1'"`.
|
||||||
|
- Throws [`parse_error.109`](../../home/exceptions.md#jsonexceptionparse_error109) if an array index in a "path" or
|
||||||
|
"from" member is not a number; example: `"array index 'foo' is not a number"`.
|
||||||
|
- Throws [`out_of_range.402`](../../home/exceptions.md#jsonexceptionout_of_range402) if the array index `-` is used
|
||||||
|
where an existing element is required (the "path" of "replace", the "from" of "move" and "copy"); example:
|
||||||
|
`"array index '-' (3) is out of range"`.
|
||||||
- Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a JSON pointer inside the patch
|
- Throws [`out_of_range.403`](../../home/exceptions.md#jsonexceptionout_of_range403) if a JSON pointer inside the patch
|
||||||
could not be resolved successfully in the current JSON value; example: `"key baz not found"`.
|
could not be resolved successfully in the current JSON value; example: `"key baz not found"`.
|
||||||
|
- Throws [`out_of_range.404`](../../home/exceptions.md#jsonexceptionout_of_range404) if a reference token of a JSON
|
||||||
|
pointer inside the patch cannot be resolved, e.g., `-` in a "remove" operation or `1a` for an array; example:
|
||||||
|
`"unresolved reference token '-'"`.
|
||||||
- Throws [`out_of_range.405`](../../home/exceptions.md#jsonexceptionout_of_range405) if JSON pointer has no parent
|
- Throws [`out_of_range.405`](../../home/exceptions.md#jsonexceptionout_of_range405) if JSON pointer has no parent
|
||||||
("add", "remove", "move")
|
("add", "remove", "move")
|
||||||
- Throws [`out_of_range.411`](../../home/exceptions.md#jsonexceptionout_of_range411) if an "add" operation's target
|
- Throws [`out_of_range.411`](../../home/exceptions.md#jsonexceptionout_of_range411) if an "add" operation's target
|
||||||
@@ -50,7 +64,7 @@ function throws an exception.
|
|||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
??? example
|
??? example "Example: apply a JSON patch in place"
|
||||||
|
|
||||||
The following code shows how a JSON patch is applied to a value.
|
The following code shows how a JSON patch is applied to a value.
|
||||||
|
|
||||||
@@ -64,6 +78,22 @@ function throws an exception.
|
|||||||
--8<-- "examples/patch_inplace.output"
|
--8<-- "examples/patch_inplace.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
??? example "Example: out_of_range.403 exception with a partially applied patch"
|
||||||
|
|
||||||
|
The following code shows a patch whose first operation succeeds and whose second operation fails. Because
|
||||||
|
`patch_inplace` applies each operation directly to the value, the first operation's effect is still visible after
|
||||||
|
the exception is caught, unlike [`patch`](patch.md).
|
||||||
|
|
||||||
|
```cpp
|
||||||
|
--8<-- "examples/patch_inplace__exception.cpp"
|
||||||
|
```
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
```json
|
||||||
|
--8<-- "examples/patch_inplace__exception.output"
|
||||||
|
```
|
||||||
|
|
||||||
## See also
|
## See also
|
||||||
|
|
||||||
- [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902)
|
- [RFC 6902 (JSON Patch)](https://tools.ietf.org/html/rfc6902)
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ invalidates all iterators and all references.
|
|||||||
`init` (in)
|
`init` (in)
|
||||||
: an initializer list
|
: an initializer list
|
||||||
|
|
||||||
|
## Exception safety
|
||||||
|
|
||||||
|
Strong guarantee: if an exception is thrown, there are no changes to any JSON value. As an exception, a `#!json null`
|
||||||
|
value is converted to an empty array or object before the element is added and keeps that type if adding the element
|
||||||
|
throws.
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
1. Throws [`type_error.308`](../../home/exceptions.md#jsonexceptiontype_error308) when called on a type other than
|
1. Throws [`type_error.308`](../../home/exceptions.md#jsonexceptiontype_error308) when called on a type other than
|
||||||
|
|||||||
@@ -37,6 +37,13 @@ Constant.
|
|||||||
--8<-- "examples/rbegin.output"
|
--8<-- "examples/rbegin.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [rend](rend.md) returns a reverse iterator to one before the first element
|
||||||
|
- [crbegin](crbegin.md) returns a const reverse iterator to the last element
|
||||||
|
- [begin](begin.md) returns an iterator to the first element
|
||||||
|
- [Iterators](../../features/iterators.md) - the article on iterators
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -38,6 +38,13 @@ Constant.
|
|||||||
--8<-- "examples/rend.output"
|
--8<-- "examples/rend.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [rbegin](rbegin.md) returns a reverse iterator to the last element
|
||||||
|
- [crend](crend.md) returns a const reverse iterator to one before the first element
|
||||||
|
- [end](end.md) returns an iterator to one past the last element
|
||||||
|
- [Iterators](../../features/iterators.md) - the article on iterators
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -65,11 +65,14 @@ The SAX event lister must follow the interface of [`json_sax`](../json_sax/index
|
|||||||
: SAX event listener (must not be null)
|
: SAX event listener (must not be null)
|
||||||
|
|
||||||
`format` (in)
|
`format` (in)
|
||||||
: the format to parse (JSON, CBOR, MessagePack, or UBJSON) (optional, `input_format_t::json` by default), see
|
: the format to parse (JSON, BJData, BON8, BSON, CBOR, MessagePack, or UBJSON) (optional, `input_format_t::json` by
|
||||||
|
default), see
|
||||||
[`input_format_t`](input_format_t.md) for more information
|
[`input_format_t`](input_format_t.md) for more information
|
||||||
|
|
||||||
`strict` (in)
|
`strict` (in)
|
||||||
: whether the input has to be consumed completely (optional, `#!cpp true` by default)
|
: whether the input has to be consumed completely (optional, `#!cpp true` by default); when `#!cpp false` and the
|
||||||
|
input is a `#!cpp std::istream`, the character that terminates a number is consumed unless
|
||||||
|
[`JSON_PRECISE_STREAM_POSITION`](../macros/json_precise_stream_position.md) is defined to `1`; see [`operator>>`](../operator_gtgt.md#notes)
|
||||||
|
|
||||||
`ignore_comments` (in)
|
`ignore_comments` (in)
|
||||||
: whether comments should be ignored and treated like whitespace (`#!cpp true`) or yield a parse error
|
: whether comments should be ignored and treated like whitespace (`#!cpp true`) or yield a parse error
|
||||||
@@ -136,9 +139,13 @@ A UTF-8 byte order mark is silently ignored.
|
|||||||
- Added `ignore_trailing_commas` in version 3.13.0.
|
- Added `ignore_trailing_commas` in version 3.13.0.
|
||||||
- Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0.
|
- Extended container support (1) to include types with lvalue-only ADL `begin`/`end` (matching `std::begin`/`std::end` semantics) in version 3.13.0.
|
||||||
- Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0.
|
- Extended overload (2) to accept heterogeneous iterator+sentinel pairs (C++20 ranges support) in version 3.13.0.
|
||||||
|
- `JSON_PRECISE_STREAM_POSITION` added in version 3.13.0 to optionally leave a `#!cpp std::istream` positioned right
|
||||||
|
after the parsed value when `strict` is `#!cpp false`.
|
||||||
|
|
||||||
!!! warning "Deprecation"
|
!!! warning "Deprecation"
|
||||||
|
|
||||||
Overload (2) replaces calls to `sax_parse` with a pair of iterators as their first parameter which has been
|
Overload (2) replaces calls to `sax_parse` with a pair of iterators as their first parameter which has been
|
||||||
deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like
|
deprecated in version 3.8.0. This overload will be removed in version 4.0.0. Please replace all calls like
|
||||||
`#!cpp sax_parse({ptr, ptr+len});` with `#!cpp sax_parse(ptr, ptr+len);`.
|
`#!cpp sax_parse({ptr, ptr+len});` with `#!cpp sax_parse(ptr, ptr+len);`.
|
||||||
|
|
||||||
|
See the [migration guide](../../integration/migration_guide.md#parsing) for how to update existing code.
|
||||||
|
|||||||
@@ -51,6 +51,11 @@ JSON value which is `1` in the case of a string.
|
|||||||
--8<-- "examples/size.output"
|
--8<-- "examples/size.output"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [empty](empty.md) checks whether the JSON value has no elements
|
||||||
|
- [max_size](max_size.md) returns the maximum possible number of elements
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
@@ -28,6 +28,10 @@ type of the JSON value is taken into account to have different hash values for `
|
|||||||
|
|
||||||
Note the output is platform-dependent.
|
Note the output is platform-dependent.
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
- [operator==](operator_eq.md) compares two JSON values for equality, consistent with equal hash values
|
||||||
|
|
||||||
## Version history
|
## Version history
|
||||||
|
|
||||||
- Added in version 1.0.0.
|
- Added in version 1.0.0.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user