mirror of
https://github.com/nlohmann/json.git
synced 2026-10-21 21:48:14 +00:00
89 lines
3.8 KiB
Markdown
89 lines
3.8 KiB
Markdown
# nlohmann::basic_json_view::find
|
|
|
|
```
|
|
iterator find(string_view_t key) const;
|
|
iterator find(const char* key) const;
|
|
iterator find(const string_t& key) const;
|
|
```
|
|
|
|
Finds a member with key `key` -- the first one, should the key occur more than once (see [Notes on duplicate keys](https://json.nlohmann.me/api/basic_json_view/operator%5B%5D/#notes)). If the value is not an object, or no member has this key, [`end()`](https://json.nlohmann.me/api/basic_json_view/end/index.md) is returned.
|
|
|
|
## Parameters
|
|
|
|
`key` (in) : key value of the element to search for
|
|
|
|
## Return value
|
|
|
|
An iterator to the member with key `key`, or [`end()`](https://json.nlohmann.me/api/basic_json_view/end/index.md) if there is none or the value is not an object.
|
|
|
|
## Exception safety
|
|
|
|
No-throw guarantee: this function never throws exceptions.
|
|
|
|
## Complexity
|
|
|
|
Linear in the number of members: as for [`ordered_json`](https://json.nlohmann.me/api/ordered_json/index.md), members are compared one after another, in document order, stopping at the first match. Each comparison first checks the key's length -- already known from the index, without reading the key bytes -- before comparing its content. Objects with 128 or more members get a hash index of their keys while parsing, so that a lookup in them takes constant time on average.
|
|
|
|
## Notes
|
|
|
|
Duplicate keys: the first member wins
|
|
|
|
If the source text repeats a key, this resolves to the *first* member with it, not to the last one that [`materialize()`](https://json.nlohmann.me/api/basic_json_view/materialize/index.md) and `parse()` keep. See the [Notes on duplicate keys](https://json.nlohmann.me/api/basic_json_view/operator%5B%5D/#notes) of `operator[]` and [Duplicate keys](https://json.nlohmann.me/features/json_view/#duplicate-keys) for the reasons and for how to get the last value.
|
|
|
|
Unlike [`BasicJsonType::find`](https://json.nlohmann.me/api/basic_json/find/index.md), which always returns `end()` for a non-object type, this also does so for a [discarded](https://json.nlohmann.me/api/basic_json_view/is_discarded/index.md) view -- there is no separate "invalid" iterator to return.
|
|
|
|
## Examples
|
|
|
|
Example
|
|
|
|
The example below scans a batch of events for those that carry an optional `user_id` field, using `find()` instead of [`operator[]`](https://json.nlohmann.me/api/basic_json_view/operator%5B%5D/index.md) (which would throw for the events that are not objects at all) or [`contains()`](https://json.nlohmann.me/api/basic_json_view/contains/index.md) followed by a second lookup. Events without a match are never materialized.
|
|
|
|
```
|
|
#include <iostream>
|
|
#include <nlohmann/json_view.hpp>
|
|
|
|
using json_document = nlohmann::json_document;
|
|
|
|
int main()
|
|
{
|
|
// a batch of incoming events; only some carry a "user_id" -- find()
|
|
// locates it without throwing for the events that turn out to not be
|
|
// objects, and without materializing an event that does not match
|
|
json_document batch = json_document::parse(R"(
|
|
[
|
|
{"type": "click", "user_id": 42},
|
|
{"type": "ping"},
|
|
{"type": "click", "user_id": 7}
|
|
]
|
|
)");
|
|
|
|
const auto events = batch.root();
|
|
for (std::size_t i = 0; i < events.size(); ++i)
|
|
{
|
|
const auto event = events[i];
|
|
const auto it = event.find("user_id");
|
|
if (it != event.end())
|
|
{
|
|
std::cout << "user " << it->materialize().dump() << '\n';
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Output:
|
|
|
|
```
|
|
user 42
|
|
user 7
|
|
```
|
|
|
|
## See also
|
|
|
|
- [count](https://json.nlohmann.me/api/basic_json_view/count/index.md) - returns the number of occurrences of a key
|
|
- [contains](https://json.nlohmann.me/api/basic_json_view/contains/index.md) - checks whether a key exists
|
|
- [`BasicJsonType::find`](https://json.nlohmann.me/api/basic_json/find/index.md) - the corresponding function of `basic_json`
|
|
|
|
## Version history
|
|
|
|
- Added in version 3.13.0 unreleased.
|