Files
kaizen/docs/mkdocs/docs/api/basic_json/object_t.md
irisz64 55f3024dc9 Squashed 'external/json/' changes from 60c48755e..55f93686c
55f93686c Merge branch 'release/3.12.0'
34e46d76d 🔖 set version to 3.12.0
00ecc7ed7 ⬆️ Bump github/codeql-action from 3.28.13 to 3.28.14 (#4726)
4424a0fcc 📝 update documentation (#4723)
11aa5f944 Make std::filesystem::path conversion to/from UTF-8 encoded string explicit (#4631)
79587f896 ⬆️ Bump mkdocs-material from 9.6.10 to 9.6.11 in /docs/mkdocs (#4715)
b67f8644e ⬆️ Bump actions/dependency-review-action from 4.5.0 to 4.6.0 (#4716)
71884486d ⬆️ Bump step-security/harden-runner from 2.11.0 to 2.11.1 (#4718)
9ef496738 ⬆️ Bump cpplint from 2.0.0 to 2.0.1 in /cmake/requirements (#4719)
9f40a7b45 ⬆️ Bump mkdocs-material from 9.6.9 to 9.6.10 in /docs/mkdocs (#4711)
d41ca94fa Adjust CMake minimal version (#4709)
3a5703931 ⬆️ Bump cppcheck from 1.4.8 to 1.5.0 in /cmake/requirements (#4698)
4d216e0c3 ⬆️ Bump actions/upload-artifact from 4.6.1 to 4.6.2 (#4700)
f971dd770 ⬆️ Bump github/codeql-action from 3.28.11 to 3.28.13 (#4707)
cd92c09c1 tests: Fix ignored attributes warning during build (#4670)
b477d2b95 Suppress clang-analyzer-webkit.NoUncountedMemberChecker (#4701)
11a835df8 ⬆️ Bump cppcheck from 1.4.7 to 1.4.8 in /cmake/requirements (#4697)
b592b6f2d ⬆️ Bump mkdocs-material from 9.6.8 to 9.6.9 in /docs/mkdocs (#4695)
e2c95baef ⬆️ Bump mkdocs-git-revision-date-localized-plugin (#4689)
7abcb5e9a fixes issue 4691 (#4693)
5474b2227 ⬆️ Bump mkdocs-material from 9.6.5 to 9.6.8 in /docs/mkdocs (#4688)
6e684350b ⬆️ Bump github/codeql-action from 3.28.10 to 3.28.11 (#4683)
f506d8acc ⬆️ Bump jinja2 from 3.1.5 to 3.1.6 in /tools/generate_natvis (#4680)
34665ae64 Correct typo in sax_interface.md (#4679)
f3dc4684b ⬆️ Bump github/codeql-action from 3.28.9 to 3.28.10 (#4661)
0b938993e ⬆️ Bump lukka/get-cmake from 3.31.5 to 3.31.6 (#4668)
543d8e417 ⬆️ Bump actions/upload-artifact from 4.6.0 to 4.6.1 (#4665)
f2e494686 ⬆️ Bump ossf/scorecard-action from 2.4.0 to 2.4.1 (#4664)
8215dbafb ⬆️ Bump mkdocs-material from 9.6.4 to 9.6.5 in /docs/mkdocs (#4659)
a3143f5f2 ⬆️ Bump step-security/harden-runner from 2.10.4 to 2.11.0 (#4652)
0b6881a95 Add regression test for #3810 (#4608)
a43350c4e Remove wsjcpp package manager (#4623)
8fb5d6f92 Some documentation updates (#4636)
2dc82053d ⬆️ Bump mkdocs-material from 9.5.50 to 9.6.4 in /docs/mkdocs (#4648)
bf6b1e2f4 ⬆️ Bump github/codeql-action from 3.28.6 to 3.28.9 (#4646)
606b6347e ⬆️ Bump coverallsapp/github-action from 2.3.4 to 2.3.6 (#4634)
c7d949f9f ⬆️ Bump github/codeql-action from 3.28.4 to 3.28.6 (#4635)
e90c860d5 Add note on derived return type for value function (#4628)
d0789e365 Bump lukka/get-cmake from 3.31.4 to 3.31.5 (#4625)
97dd60c22 Bump github/codeql-action from 3.28.3 to 3.28.4 (#4624)
666d06144 Bump github/codeql-action from 3.28.2 to 3.28.3 (#4620)
bf8ccc20e fix compilation issue (#4613)
786c5040e Bump github/codeql-action from 3.28.1 to 3.28.2 (#4617)
bd4fea39e Bump actions/stale from 9.0.0 to 9.1.0 (#4616)
8c7dcd3b4 Bump step-security/harden-runner from 2.10.3 to 2.10.4 (#4614)
b23cdeac2 Bump mkdocs-material from 9.5.49 to 9.5.50 in /docs/mkdocs (#4615)
1b813519c Add VisionOS support to Swift Package Manager Package.swift definition file (#4611)
f06604fce Bump the copyright years (#4606)
d23291ba2 use diagnostic positions in exceptions (#4585)
0f9e6ae09 Fix broken links (#4605)
8a882f32e Generate template functions with NLOHMANN_DEFINE_TYPE macros (#4597)
bdb8d2b7b Serialize empty tuple into '[]'  instead of null (#4594)
e72046ef9 Bump step-security/harden-runner from 2.10.2 to 2.10.3 (#4604)
4a0081a1c Bump actions/upload-artifact from 4.5.0 to 4.6.0 (#4603)
52b261421 Bump srvaroa/labeler (#4602)
f74e5c6a5 Bump github/codeql-action from 3.27.9 to 3.28.1 (#4601)
e25a82461 Bump lukka/get-cmake from 3.31.2 to 3.31.4 (#4600)
26cfec34b Clean up and document project files (#4560)
ad2ee1853 Fix coverage job (#4595)
2d42229f4 Support BSON uint64 de/serialization (#4590)
1809b3d80 Add note to Jetbrains support (#4592)
48e7b4c23 BJData Fixes (#4588)
0cb1241d5 Improve Bazel support: Switch to Bzlmod (#4584)
2e50d5b2f BJData optimized binary array type (#4513)

git-subtree-dir: external/json
git-subtree-split: 55f93686c01528224f448c19128836e7df245f72
2025-06-26 22:22:03 +02:00

4.1 KiB

nlohmann::basic_json::object_t

using object_t = ObjectType<StringType,
                            basic_json,
                            default_object_comparator_t,
                            AllocatorType<std::pair<const StringType, basic_json>>>;

The type used to store JSON objects.

RFC 8259 describes JSON objects as follows:

An object is an unordered collection of zero or more name/value pairs, where a name is a string and a value is a string, number, boolean, null, object, or array.

To store objects in C++, a type is defined by the template parameters described below.

Template parameters

ObjectType
the container to store objects (e.g., std::map or std::unordered_map)
StringType
the type of the keys or names (e.g., std::string). The comparison function std::less<StringType> is used to order elements inside the container.
AllocatorType
the allocator to use for objects (e.g., std::allocator)

Notes

Default type

With the default values for ObjectType (std::map), StringType (std::string), and AllocatorType (std::allocator), the default value for object_t is:

// until C++14
std::map<
  std::string, // key_type
  basic_json, // value_type
  std::less<std::string>, // key_compare
  std::allocator<std::pair<const std::string, basic_json>> // allocator_type
>

// since C++14
std::map<
  std::string, // key_type
  basic_json, // value_type
  std::less<>, // key_compare
  std::allocator<std::pair<const std::string, basic_json>> // allocator_type
>

See default_object_comparator_t for more information.

Behavior

The choice of object_t influences the behavior of the JSON class. With the default type, objects have the following behavior:

  • When all names are unique, objects will be interoperable in the sense that all software implementations receiving that object will agree on the name-value mappings.
  • When the names within an object are not unique, it is unspecified which one of the values for a given key will be chosen. For instance, #!json {"key": 2, "key": 1} could be equal to either #!json {"key": 1} or #!json {"key": 2}.
  • Internally, name/value pairs are stored in lexicographical order of the names. Objects will also be serialized (see dump) in this order. For instance, #!json {"b": 1, "a": 2} and #!json {"a": 2, "b": 1} will be stored and serialized as #!json {"a": 2, "b": 1}.
  • When comparing objects, the order of the name/value pairs is irrelevant. This makes objects interoperable in the sense 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.

Limits

RFC 8259 specifies:

An implementation may set limits on the maximum depth of nesting.

In this class, the object's limit of nesting is not explicitly constrained. However, a maximum depth of nesting may be introduced by the compiler or runtime environment. A theoretical limit can be queried by calling the max_size function of a JSON object.

Storage

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 key order

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 alphabetical order as std::map with std::less is used by default. Please note this behavior conforms to RFC 8259, because any order implements the specified "unordered" nature of JSON objects.

Examples

??? example

The following code shows that `object_t` is by default, a typedef to `#!cpp std::map<json::string_t, json>`.
 
```cpp
--8<-- "examples/object_t.cpp"
```

Output:

```json
--8<-- "examples/object_t.output"
```

Version history

  • Added in version 1.0.0.