Github   Telegram
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Friends | List of all members
formats::json::ValueBuilder Class Referencefinal

Builder for JSON. More...

#include <userver/formats/json/value_builder.hpp>

Classes

struct  IterTraits
 

Public Types

using iterator = Iterator< IterTraits >
 

Public Member Functions

 ValueBuilder () noexcept=default
 Constructs a ValueBuilder that holds kNull.
 
 ValueBuilder (Type type)
 Constructs a valueBuilder that holds default value for provided type.
 
 ValueBuilder (common::TransferTag, ValueBuilder &&) noexcept
 Transfers the ValueBuilder object. More...
 
 ValueBuilder (const ValueBuilder &other)
 
 ValueBuilder (ValueBuilder &&other)
 
ValueBuilderoperator= (const ValueBuilder &other)
 
ValueBuilderoperator= (ValueBuilder &&other)
 
 ValueBuilder (const formats::json::Value &other)
 
 ValueBuilder (formats::json::Value &&other)
 
 ValueBuilder (bool t)
 Converting constructors.
 
 ValueBuilder (const char *str)
 
 ValueBuilder (const std::string &str)
 
 ValueBuilder (std::string_view str)
 
 ValueBuilder (int t)
 
 ValueBuilder (unsigned int t)
 
 ValueBuilder (uint64_t t)
 
 ValueBuilder (int64_t t)
 
 ValueBuilder (float t)
 
 ValueBuilder (double t)
 
template<typename T >
 ValueBuilder (const T &t)
 Universal constructor using Serialize. More...
 
ValueBuilder operator[] (std::string key)
 Access member by key for modification. More...
 
ValueBuilder operator[] (std::size_t index)
 Access array member by index for modification. More...
 
template<typename Tag , utils::StrongTypedefOps Ops, typename Enable = std::enable_if_t<utils::IsStrongTypedefLoggable(Ops)>>
ValueBuilder operator[] (utils::StrongTypedef< Tag, std::string, Ops > key)
 Access member by key for modification. More...
 
void EmplaceNocheck (const std::string &key, ValueBuilder value)
 Emplaces new member w/o a check whether the key already exists. More...
 
void Remove (const std::string &key)
 Remove key from object. If key is missing nothing happens. More...
 
iterator begin ()
 
iterator end ()
 
bool IsEmpty () const
 Returns whether the array or object is empty. More...
 
bool IsNull () const noexcept
 Returns true if *this holds a Null (Type::kNull).
 
bool IsBool () const noexcept
 Returns true if *this is convertible to bool.
 
bool IsInt () const noexcept
 Returns true if *this is convertible to int.
 
bool IsInt64 () const noexcept
 Returns true if *this is convertible to int64_t.
 
bool IsUInt64 () const noexcept
 Returns true if *this is convertible to uint64_t.
 
bool IsDouble () const noexcept
 Returns true if *this is convertible to double.
 
bool IsString () const noexcept
 Returns true if *this is convertible to std::string.
 
bool IsArray () const noexcept
 Returns true if *this is an array (Type::kArray).
 
bool IsObject () const noexcept
 Returns true if *this holds a map (Type::kObject).
 
std::size_t GetSize () const
 Returns array size or object members count. More...
 
bool HasMember (const char *key) const
 Returns true if value holds a key. More...
 
bool HasMember (const std::string &key) const
 Returns true if value holds a key. More...
 
std::string GetPath () const
 Returns full path to this value.
 
void Resize (std::size_t size)
 Resize the array value or convert null value into an array of requested size. More...
 
void PushBack (ValueBuilder &&bld)
 Add element into the last position of array. More...
 
formats::json::Value ExtractValue ()
 Take out the resulting Value object. After calling this method the object is in unspecified (but valid - possibly null) state. More...
 

Friends

class Iterator< IterTraits, common::IteratorDirection::kForward >
 
class Iterator< IterTraits, common::IteratorDirection::kReverse >
 

Detailed Description

Builder for JSON.

Class provides methods for building JSON. For read only access to the existing JSON values use formats::json::Value.

Example usage:

// #include <userver/formats/json.hpp>
builder["key1"] = 1;
builder["key2"]["key3"] = "val";
ASSERT_EQ(json["key1"].As<int>(), 1);
ASSERT_EQ(json["key2"]["key3"].As<std::string>(), "val");

Customization example:

namespace my_namespace {
struct MyKeyValue {
std::string field1;
int field2;
};
// The function must be declared in the namespace of your type
formats::json::Value Serialize(const MyKeyValue& data,
builder["field1"] = data.field1;
builder["field2"] = data.field2;
return builder.ExtractValue();
}
TEST(JsonValueBuilder, ExampleCustomization) {
MyKeyValue object = {"val", 1};
builder["example"] = object;
auto json = builder.ExtractValue();
ASSERT_EQ(json["example"]["field1"].As<std::string>(), "val");
ASSERT_EQ(json["example"]["field2"].As<int>(), 1);
}
} // namespace my_namespace
See also
Formats (JSON, YAML, BSON, ...)
Examples
samples/config_service/config_service.cpp, samples/mongo_service/mongo_service.cpp, samples/tcp_full_duplex_service/tcp_full_duplex_service.cpp, samples/testsuite-support/src/metrics.cpp, samples/testsuite-support/src/now.cpp, and samples/testsuite-support/src/testpoint.cpp.

Definition at line 41 of file value_builder.hpp.

Member Typedef Documentation

◆ iterator

Definition at line 50 of file value_builder.hpp.

Constructor & Destructor Documentation

◆ ValueBuilder() [1/2]

formats::json::ValueBuilder::ValueBuilder ( common::TransferTag  ,
ValueBuilder &&   
)
noexcept

Transfers the ValueBuilder object.

See also
formats::common::TransferTag for the transfer semantics

◆ ValueBuilder() [2/2]

template<typename T >
formats::json::ValueBuilder::ValueBuilder ( const T &  t)
inline

Universal constructor using Serialize.

Definition at line 86 of file value_builder.hpp.

Member Function Documentation

◆ EmplaceNocheck()

void formats::json::ValueBuilder::EmplaceNocheck ( const std::string &  key,
ValueBuilder  value 
)

Emplaces new member w/o a check whether the key already exists.

Warning
May create invalid JSON with duplicate key.
Exceptions
`TypeMismatchException`if not object or null value.

◆ ExtractValue()

formats::json::Value formats::json::ValueBuilder::ExtractValue ( )

Take out the resulting Value object. After calling this method the object is in unspecified (but valid - possibly null) state.

Exceptions
`JsonException`if called not from the root builder.
Examples
samples/config_service/config_service.cpp, samples/mongo_service/mongo_service.cpp, samples/tcp_full_duplex_service/tcp_full_duplex_service.cpp, samples/testsuite-support/src/metrics.cpp, samples/testsuite-support/src/now.cpp, and samples/testsuite-support/src/testpoint.cpp.

◆ GetSize()

std::size_t formats::json::ValueBuilder::GetSize ( ) const

Returns array size or object members count.

Exceptions
`TypeMismatchException`if not an array or an object.

◆ HasMember() [1/2]

bool formats::json::ValueBuilder::HasMember ( const char *  key) const

Returns true if value holds a key.

Exceptions
`TypeMismatchException`if not an object or null.

◆ HasMember() [2/2]

bool formats::json::ValueBuilder::HasMember ( const std::string &  key) const

Returns true if value holds a key.

Exceptions
`TypeMismatchException`if *this is not a map or null.

◆ IsEmpty()

bool formats::json::ValueBuilder::IsEmpty ( ) const

Returns whether the array or object is empty.

Exceptions
`TypeMismatchException`if not an array or an object.

◆ operator[]() [1/3]

ValueBuilder formats::json::ValueBuilder::operator[] ( std::size_t  index)

Access array member by index for modification.

Exceptions
`TypeMismatchException`if not an array value.
`OutOfBoundsException`if index is greater than size.

◆ operator[]() [2/3]

ValueBuilder formats::json::ValueBuilder::operator[] ( std::string  key)

Access member by key for modification.

Exceptions
`TypeMismatchException`if not object or null value.

◆ operator[]() [3/3]

template<typename Tag , utils::StrongTypedefOps Ops, typename Enable = std::enable_if_t<utils::IsStrongTypedefLoggable(Ops)>>
ValueBuilder formats::json::ValueBuilder::operator[] ( utils::StrongTypedef< Tag, std::string, Ops >  key)

Access member by key for modification.

Exceptions
`TypeMismatchException`if not object or null value.

◆ PushBack()

void formats::json::ValueBuilder::PushBack ( ValueBuilder &&  bld)

Add element into the last position of array.

Exceptions
`TypeMismatchException`if not an array or null.

◆ Remove()

void formats::json::ValueBuilder::Remove ( const std::string &  key)

Remove key from object. If key is missing nothing happens.

Exceptions
`TypeMismatchException`if value is not an object.

◆ Resize()

void formats::json::ValueBuilder::Resize ( std::size_t  size)

Resize the array value or convert null value into an array of requested size.

Exceptions
`TypeMismatchException`if not an array or null.

Friends And Related Function Documentation

◆ Iterator< IterTraits, common::IteratorDirection::kForward >

friend class Iterator< IterTraits, common::IteratorDirection::kForward >
friend

Definition at line 196 of file value_builder.hpp.

◆ Iterator< IterTraits, common::IteratorDirection::kReverse >

friend class Iterator< IterTraits, common::IteratorDirection::kReverse >
friend

Definition at line 196 of file value_builder.hpp.


The documentation for this class was generated from the following file: