class Value

Declaration

class Value { /* full declaration omitted */ };

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: - strings: std::string, SmallString, formatv, StringRef, char* (char*, and StringRef are references, not copies!) - numbers - booleans - null: nullptr - arrays: {"foo", 42.0, false} - serializable things: types with toJSON(const T & )->Value, found by ADL They can also be constructed from object/array helpers: - json::Object is a type like map <ObjectKey , Value> - json::Array is a type like vector <Value > These can be list-initialized, or used to build up collections in a loop. json::ary(Collection) converts all items in a collection to Values. === Inspecting values === Each Value is one of the JSON kinds: null (nullptr_t) boolean (bool) number (double or int64) string (StringRef) array (json::Array) object (json::Object) The kind can be queried directly, or implicitly via the typed accessors: if (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 (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 & )->bool Deserializers are provided for: - bool - int and int64_t - double - std::string - vector <T >, where T is deserializable - map <string , T>, where T is deserializable - Optional <T >, where T is deserializable ObjectMapper can help writing fromJSON() functions for object types. 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 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);

Declared at: llvm/include/llvm/Support/JSON.h:282

Method Overview

  • public Value(llvm::json::Value && M)
  • public template <typename T, typename = typename std::enable_if<std::is_same<Value, decltype(toJSON(*(const T *)nullptr))>::value>, llvm::json::Value * = nullptr> Value(const T & V)
  • public template <typename T, typename = typename std::enable_if<std::is_floating_point<T>::value>::type, double * = nullptr> Value(T D)
  • public template <typename T, typename = typename std::enable_if<std::is_integral<T>::value>::type, typename = typename std::enable_if<!std::is_same<T, bool>::value>::type> Value(T I)
  • public template <typename T, typename = typename std::enable_if<std::is_same<T, bool>::value>::type, bool = false> Value(T B)
  • public template <typename Elt> Value(const std::map<std::string, Elt> & C)
  • public template <typename Elt> Value(const std::vector<Elt> & C)
  • public Value(std::nullptr_t)
  • public Value(const char * V)
  • public Value(const llvm::formatv_object_base & V)
  • public Value(const llvm::json::Value & M)
  • public Value(std::initializer_list<Value> Elements)
  • public Value(json::Array && Elements)
  • public Value(json::Object && Properties)
  • public Value(std::string V)
  • public Value(const llvm::SmallVectorImpl<char> & V)
  • public Value(llvm::StringRef V)
  • public const json::Array * getAsArray() const
  • public json::Array * getAsArray()
  • public llvm::Optional<bool> getAsBoolean() const
  • public llvm::Optional<int64_t> getAsInteger() const
  • public llvm::Optional<std::nullptr_t> getAsNull() const
  • public llvm::Optional<double> getAsNumber() const
  • public const json::Object * getAsObject() const
  • public json::Object * getAsObject()
  • public llvm::Optional<llvm::StringRef> getAsString() const
  • public llvm::json::Value::Kind kind() const
  • public ~Value()

Methods

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

Declared at: llvm/include/llvm/Support/JSON.h:297

Parameters

llvm::json::Value&& M

template <typename T,
          typename = typename std::enable_if<
              std::is_same<
                  Value,
                  decltype(toJSON(*(
                      const T*)nullptr))>::value>,
          llvm::json::Value* = nullptr>
Value(const T& V)

Declared at: llvm/include/llvm/Support/JSON.h:360

Templates

T
= typename std::enable_if<std::is_same<Value, decltype(toJSON(*(const T *)nullptr))>::value>
llvm::json::Value * = nullptr

Parameters

const T& V

template <
    typename T,
    typename = typename std::enable_if<
        std::is_floating_point<T>::value>::type,
    double* = nullptr>
Value(T D)

Declared at: llvm/include/llvm/Support/JSON.h:352

Templates

T
= typename std::enable_if<std::is_floating_point<T>::value>::type
double * = nullptr

Parameters

T D

template <
    typename T,
    typename = typename std::enable_if<
        std::is_integral<T>::value>::type,
    typename = typename std::enable_if<
        !std::is_same<T, bool>::value>::type>
Value(T I)

Declared at: llvm/include/llvm/Support/JSON.h:344

Templates

T
= typename std::enable_if<std::is_integral<T>::value>::type
= typename std::enable_if<!std::is_same<T, bool>::value>::type

Parameters

T I

template <typename T,
          typename = typename std::enable_if<
              std::is_same<T, bool>::value>::type,
          bool = false>
Value(T B)

Declared at: llvm/include/llvm/Support/JSON.h:336

Templates

T
= typename std::enable_if<std::is_same<T, bool>::value>::type
bool = false

Parameters

T B

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

Declared at: llvm/include/llvm/Support/JSON.h:308

Templates

Elt

Parameters

const std::map<std::string, Elt>& C

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

Declared at: llvm/include/llvm/Support/JSON.h:303

Templates

Elt

Parameters

const std::vector<Elt>& C

Value(std::nullptr_t)

Declared at: llvm/include/llvm/Support/JSON.h:329

Parameters

std::nullptr_t

Value(const char* V)

Declared at: llvm/include/llvm/Support/JSON.h:328

Parameters

const char* V

Value(const llvm::formatv_object_base& V)

Declared at: llvm/include/llvm/Support/JSON.h:319

Parameters

const llvm::formatv_object_base& V

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

Declared at: llvm/include/llvm/Support/JSON.h:296

Parameters

const llvm::json::Value& M

Value(std::initializer_list<Value> Elements)

Declared at: llvm/include/llvm/Support/JSON.h:298

Parameters

std::initializer_list<Value> Elements

Value(json::Array&& Elements)

Declared at: llvm/include/llvm/Support/JSON.h:299

Parameters

json::Array&& Elements

Value(json::Object&& Properties)

Declared at: llvm/include/llvm/Support/JSON.h:304

Parameters

json::Object&& Properties

Value(std::string V)

Declared at: llvm/include/llvm/Support/JSON.h:310

Parameters

std::string V

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

Declared at: llvm/include/llvm/Support/JSON.h:317

Parameters

const llvm::SmallVectorImpl<char>& V

Value(llvm::StringRef V)

Declared at: llvm/include/llvm/Support/JSON.h:321

Parameters

llvm::StringRef V

const json::Array* getAsArray() const

Declared at: llvm/include/llvm/Support/JSON.h:438

json::Array* getAsArray()

Declared at: llvm/include/llvm/Support/JSON.h:441

llvm::Optional<bool> getAsBoolean() const

Declared at: llvm/include/llvm/Support/JSON.h:400

llvm::Optional<int64_t> getAsInteger() const

Declared at: llvm/include/llvm/Support/JSON.h:413

llvm::Optional<std::nullptr_t> getAsNull() const

Declared at: llvm/include/llvm/Support/JSON.h:395

llvm::Optional<double> getAsNumber() const

Declared at: llvm/include/llvm/Support/JSON.h:405

const json::Object* getAsObject() const

Declared at: llvm/include/llvm/Support/JSON.h:432

json::Object* getAsObject()

Declared at: llvm/include/llvm/Support/JSON.h:435

llvm::Optional<llvm::StringRef> getAsString()
    const

Declared at: llvm/include/llvm/Support/JSON.h:425

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

Declared at: llvm/include/llvm/Support/JSON.h:374

~Value()

Declared at: llvm/include/llvm/Support/JSON.h:372