LLVM 19.0.0git
Public Types | Public Member Functions | Friends | List of all members
llvm::json::Value Class Reference

A Value is an JSON value of unknown type. More...

#include "llvm/Support/JSON.h"

Public Types

enum  Kind {
  Null , Boolean , Number , String ,
  Array , Object
}
 

Public Member Functions

 Value (const Value &M)
 
 Value (Value &&M)
 
 Value (std::initializer_list< Value > Elements)
 
 Value (json::Array &&Elements)
 
template<typename Elt >
 Value (const std::vector< Elt > &C)
 
 Value (json::Object &&Properties)
 
template<typename Elt >
 Value (const std::map< std::string, Elt > &C)
 
 Value (std::string V)
 
 Value (const llvm::SmallVectorImpl< char > &V)
 
 Value (const llvm::formatv_object_base &V)
 
 Value (StringRef V)
 
 Value (const char *V)
 
 Value (std::nullptr_t)
 
template<typename T , typename = std::enable_if_t<std::is_same_v<T, bool>>, bool = false>
 Value (T B)
 
template<typename T , typename = std::enable_if_t<is_uint_64_bit_v<T>>>
 Value (T V)
 
template<typename T , typename = std::enable_if_t<std::is_integral_v<T>>, typename = std::enable_if_t<!std::is_same_v<T, bool>>, typename = std::enable_if_t<!is_uint_64_bit_v<T>>>
 Value (T I)
 
template<typename T , typename = std::enable_if_t<std::is_floating_point_v<T>>, double * = nullptr>
 Value (T D)
 
template<typename T , typename = std::enable_if_t< std::is_same_v<Value, decltype(toJSON(*(const T *)nullptr))>>, Value * = nullptr>
 Value (const T &V)
 
Valueoperator= (const Value &M)
 
Valueoperator= (Value &&M)
 
 ~Value ()
 
Kind kind () const
 
std::optional< std::nullptr_t > getAsNull () const
 
std::optional< boolgetAsBoolean () const
 
std::optional< double > getAsNumber () const
 
std::optional< int64_t > getAsInteger () const
 
std::optional< uint64_tgetAsUINT64 () const
 
std::optional< llvm::StringRefgetAsString () const
 
const json::ObjectgetAsObject () const
 
json::ObjectgetAsObject ()
 
const json::ArraygetAsArray () const
 
json::ArraygetAsArray ()
 

Friends

class Array
 
class Object
 
class OStream
 
bool operator== (const Value &, const Value &)
 

Detailed Description

A Value is an JSON value of unknown type.

They can be copied, but should generally be moved.

=== Composing values ===

You can implicitly construct Values from:

They can also be constructed from object/array helpers:

=== Inspecting values ===

Each Value is one of the JSON kinds: null (nullptr_t) boolean (bool) number (double, int64 or uint64) string (StringRef) array (json::Array) object (json::Object)

The kind can be queried directly, or implicitly via the typed accessors: if (std::optional<StringRef> S = E.getAsString() assert(E.kind() == Value::String);

Array and Object also have typed indexing accessors for easy traversal: Expected<Value> E = parse(R"( {"options": {"font": "sans-serif"}} )"); if (Object* O = E->getAsObject()) if (Object* Opts = O->getObject("options")) if (std::optional<StringRef> Font = Opts->getString("font")) assert(Opts->at("font").kind() == Value::String);

=== Converting JSON values to C++ types ===

The convention is to have a deserializer function findable via ADL: fromJSON(const json::Value&, T&, Path) -> bool

The return value indicates overall success, and Path is used for precise error reporting. (The Path::Root passed in at the top level fromJSON call captures any nested error and can render it in context). If conversion fails, fromJSON calls Path::report() and immediately returns. This ensures that the first fatal error survives.

Deserializers are provided for:

For conversion in the other direction, the serializer function is: toJSON(const T&) -> json::Value If this exists, then it also allows constructing Value from T, and can be used to serialize vector<T>, map<string, T>, and std::optional<T>.

=== Serialization ===

Values can be serialized to JSON: 1) raw_ostream << Value // Basic formatting. 2) raw_ostream << formatv("{0}", Value) // Basic formatting. 3) raw_ostream << formatv("{0:2}", Value) // Pretty-print with indent 2.

And parsed: Expected<Value> E = json::parse("[1, 2, null]"); assert(E && E->kind() == Value::Array);

Definition at line 288 of file JSON.h.

Member Enumeration Documentation

◆ Kind

Enumerator
Null 
Boolean 
Number 

Number values can store both int64s and doubles at full precision, depending on what they were constructed/parsed from.

String 
Array 
Object 

Definition at line 290 of file JSON.h.

Constructor & Destructor Documentation

◆ Value() [1/18]

llvm::json::Value::Value ( const Value M)
inline

Definition at line 302 of file JSON.h.

◆ Value() [2/18]

llvm::json::Value::Value ( Value &&  M)
inline

Definition at line 303 of file JSON.h.

◆ Value() [3/18]

llvm::json::Value::Value ( std::initializer_list< Value Elements)

Definition at line 106 of file JSON.cpp.

◆ Value() [4/18]

llvm::json::Value::Value ( json::Array &&  Elements)
inline

Definition at line 305 of file JSON.h.

◆ Value() [5/18]

template<typename Elt >
llvm::json::Value::Value ( const std::vector< Elt > &  C)
inline

Definition at line 309 of file JSON.h.

◆ Value() [6/18]

llvm::json::Value::Value ( json::Object &&  Properties)
inline

Definition at line 310 of file JSON.h.

◆ Value() [7/18]

template<typename Elt >
llvm::json::Value::Value ( const std::map< std::string, Elt > &  C)
inline

Definition at line 314 of file JSON.h.

◆ Value() [8/18]

llvm::json::Value::Value ( std::string  V)
inline

Definition at line 316 of file JSON.h.

References assert(), llvm::json::fixUTF8(), llvm::json::isUTF8(), and LLVM_UNLIKELY.

◆ Value() [9/18]

llvm::json::Value::Value ( const llvm::SmallVectorImpl< char > &  V)
inline

Definition at line 323 of file JSON.h.

References string.

◆ Value() [10/18]

llvm::json::Value::Value ( const llvm::formatv_object_base V)
inline

Definition at line 325 of file JSON.h.

◆ Value() [11/18]

llvm::json::Value::Value ( StringRef  V)
inline

Definition at line 327 of file JSON.h.

References assert(), llvm::json::fixUTF8(), llvm::json::isUTF8(), and LLVM_UNLIKELY.

◆ Value() [12/18]

llvm::json::Value::Value ( const char V)
inline

Definition at line 334 of file JSON.h.

◆ Value() [13/18]

llvm::json::Value::Value ( std::nullptr_t  )
inline

Definition at line 335 of file JSON.h.

◆ Value() [14/18]

template<typename T , typename = std::enable_if_t<std::is_same_v<T, bool>>, bool = false>
llvm::json::Value::Value ( T  B)
inline

Definition at line 340 of file JSON.h.

References B.

◆ Value() [15/18]

template<typename T , typename = std::enable_if_t<is_uint_64_bit_v<T>>>
llvm::json::Value::Value ( T  V)
inline

Definition at line 346 of file JSON.h.

◆ Value() [16/18]

template<typename T , typename = std::enable_if_t<std::is_integral_v<T>>, typename = std::enable_if_t<!std::is_same_v<T, bool>>, typename = std::enable_if_t<!is_uint_64_bit_v<T>>>
llvm::json::Value::Value ( T  I)
inline

Definition at line 355 of file JSON.h.

References I.

◆ Value() [17/18]

template<typename T , typename = std::enable_if_t<std::is_floating_point_v<T>>, double * = nullptr>
llvm::json::Value::Value ( T  D)
inline

Definition at line 362 of file JSON.h.

References D.

◆ Value() [18/18]

template<typename T , typename = std::enable_if_t< std::is_same_v<Value, decltype(toJSON(*(const T *)nullptr))>>, Value * = nullptr>
llvm::json::Value::Value ( const T V)
inline

Definition at line 370 of file JSON.h.

◆ ~Value()

llvm::json::Value::~Value ( )
inline

Definition at line 382 of file JSON.h.

Member Function Documentation

◆ getAsArray() [1/2]

json::Array * llvm::json::Value::getAsArray ( )
inline

Definition at line 471 of file JSON.h.

References LLVM_LIKELY.

◆ getAsArray() [2/2]

const json::Array * llvm::json::Value::getAsArray ( ) const
inline

Definition at line 468 of file JSON.h.

References LLVM_LIKELY.

◆ getAsBoolean()

std::optional< bool > llvm::json::Value::getAsBoolean ( ) const
inline

Definition at line 412 of file JSON.h.

References LLVM_LIKELY.

◆ getAsInteger()

std::optional< int64_t > llvm::json::Value::getAsInteger ( ) const
inline

Definition at line 427 of file JSON.h.

References D, and LLVM_LIKELY.

◆ getAsNull()

std::optional< std::nullptr_t > llvm::json::Value::getAsNull ( ) const
inline

Definition at line 407 of file JSON.h.

References LLVM_LIKELY.

◆ getAsNumber()

std::optional< double > llvm::json::Value::getAsNumber ( ) const
inline

Definition at line 417 of file JSON.h.

References LLVM_LIKELY.

◆ getAsObject() [1/2]

json::Object * llvm::json::Value::getAsObject ( )
inline

Definition at line 465 of file JSON.h.

References LLVM_LIKELY.

◆ getAsObject() [2/2]

const json::Object * llvm::json::Value::getAsObject ( ) const
inline

Definition at line 462 of file JSON.h.

References LLVM_LIKELY.

◆ getAsString()

std::optional< llvm::StringRef > llvm::json::Value::getAsString ( ) const
inline

Definition at line 455 of file JSON.h.

References LLVM_LIKELY.

◆ getAsUINT64()

std::optional< uint64_t > llvm::json::Value::getAsUINT64 ( ) const
inline

Definition at line 445 of file JSON.h.

References N.

◆ kind()

Kind llvm::json::Value::kind ( ) const
inline

Definition at line 384 of file JSON.h.

References Array, Boolean, llvm_unreachable, Null, Number, Object, and String.

◆ operator=() [1/2]

Value & llvm::json::Value::operator= ( const Value M)
inline

Definition at line 372 of file JSON.h.

◆ operator=() [2/2]

Value & llvm::json::Value::operator= ( Value &&  M)
inline

Definition at line 377 of file JSON.h.

Friends And Related Function Documentation

◆ Array

friend class Array
friend

Definition at line 482 of file JSON.h.

Referenced by kind(), and llvm::json::OStream::value().

◆ Object

friend class Object
friend

Definition at line 483 of file JSON.h.

Referenced by kind(), and llvm::json::OStream::value().

◆ operator==

bool operator== ( const Value L,
const Value R 
)
friend

Definition at line 185 of file JSON.cpp.

◆ OStream

friend class OStream
friend

Definition at line 507 of file JSON.h.


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