JSON for Modern C++ 3.10.4

◆ value() [2/4]

template<template< typename U, typename V, typename... Args > class ObjectType = std::map, template< typename U, typename... Args > class ArrayType = std::vector, class StringType = std::string, class BooleanType = bool, class NumberIntegerType = std::int64_t, class NumberUnsignedType = std::uint64_t, class NumberFloatType = double, template< typename U > class AllocatorType = std::allocator, template< typename T, typename SFINAE=void > class JSONSerializer = adl_serializer, class BinaryType = std::vector<std::uint8_t>>
template<class ValueType , typename std::enable_if< detail::is_getable< basic_json_t, ValueType >::value, int >::type = 0>
ValueType nlohmann::basic_json< ObjectType, ArrayType, StringType, BooleanType, NumberIntegerType, NumberUnsignedType, NumberFloatType, AllocatorType, JSONSerializer, BinaryType >::value ( const json_pointer ptr,
const ValueType &  default_value 
) const

Returns either a copy of an object's element at the specified key key or a given default value if no element with key key exists.

The function is basically equivalent to executing

try {
return at(ptr);
} catch(out_of_range) {
return default_value;
detail::out_of_range out_of_range
exception indicating access out of the defined range
Definition: json.hpp:17771
reference at(size_type idx)
access specified array element with bounds checking
Definition: json.hpp:20987
Unlike at(const json_pointer&), this function does not throw if the given key key was not found.
[in]ptra JSON pointer to the element to access
[in]default_valuethe value to return if ptr found no value
Template Parameters
ValueTypetype compatible to JSON values, for instance int for JSON integer numbers, bool for JSON booleans, or std::vector types for JSON arrays. Note the type of the expected value at key and the default value default_value must be compatible.
copy of the element at key key or default_value if key is not found
type_error.302if default_value does not match the type of the value at ptr
type_error.306if the JSON value is not an object; in that case, using value() with a key makes no sense.
Logarithmic in the size of the container.
The example below shows how object elements can be queried with a default value.
1#include <iostream>
2#include <nlohmann/json.hpp>
4using json = nlohmann::json;
6int main()
8 // create a JSON object with different entry types
9 json j =
10 {
11 {"integer", 1},
12 {"floating", 42.23},
13 {"string", "hello world"},
14 {"boolean", true},
15 {"object", {{"key1", 1}, {"key2", 2}}},
16 {"array", {1, 2, 3}}
17 };
19 // access existing values
20 int v_integer = j.value("/integer"_json_pointer, 0);
21 double v_floating = j.value("/floating"_json_pointer, 47.11);
23 // access nonexisting values and rely on default value
24 std::string v_string = j.value("/nonexisting"_json_pointer, "oops");
25 bool v_boolean = j.value("/nonexisting"_json_pointer, false);
27 // output values
28 std::cout << std::boolalpha << v_integer << " " << v_floating
29 << " " << v_string << " " << v_boolean << "\n";
basic_json<> json
default JSON class
Definition: json.hpp:3472

Output (play with this example online):
1 42.23 oops false
The example code above can be translated with
g++ -std=c++11 -Isingle_include doc/examples/basic_json__value_ptr.cpp -o basic_json__value_ptr 
See also
see operator[](const json_pointer&) for unchecked access by reference
version 2.0.2

Definition at line 21572 of file json.hpp.