LLVM 20.0.0git
|
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) | |
Value & | operator= (const Value &M) |
Value & | operator= (Value &&M) |
~Value () | |
Kind | kind () const |
std::optional< std::nullptr_t > | getAsNull () const |
std::optional< bool > | getAsBoolean () const |
std::optional< double > | getAsNumber () const |
std::optional< int64_t > | getAsInteger () const |
std::optional< uint64_t > | getAsUINT64 () const |
std::optional< llvm::StringRef > | getAsString () const |
const json::Object * | getAsObject () const |
json::Object * | getAsObject () |
const json::Array * | getAsArray () const |
json::Array * | getAsArray () |
Friends | |
class | Array |
class | Object |
class | OStream |
bool | operator== (const Value &, const Value &) |
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);
llvm::json::Value::Value | ( | std::initializer_list< Value > | Elements | ) |
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
Definition at line 316 of file JSON.h.
References assert(), llvm::json::fixUTF8(), llvm::json::isUTF8(), and LLVM_UNLIKELY.
|
inline |
|
inline |
|
inline |
Definition at line 327 of file JSON.h.
References assert(), llvm::json::fixUTF8(), llvm::json::isUTF8(), and LLVM_UNLIKELY.
|
inline |
|
inline |
Definition at line 471 of file JSON.h.
References LLVM_LIKELY.
|
inline |
|
inline |
Definition at line 412 of file JSON.h.
References LLVM_LIKELY.
|
inline |
Definition at line 427 of file JSON.h.
References D, and LLVM_LIKELY.
|
inline |
Definition at line 407 of file JSON.h.
References LLVM_LIKELY.
|
inline |
Definition at line 417 of file JSON.h.
References LLVM_LIKELY.
|
inline |
Definition at line 465 of file JSON.h.
References LLVM_LIKELY.
|
inline |
Definition at line 462 of file JSON.h.
References LLVM_LIKELY.
|
inline |
Definition at line 455 of file JSON.h.
References LLVM_LIKELY.
|
inline |
|
inline |
|
friend |
Definition at line 482 of file JSON.h.
Referenced by llvm::json::abbreviate(), llvm::json::abbreviateChildren(), kind(), and llvm::json::OStream::value().
|
friend |
Definition at line 483 of file JSON.h.
Referenced by llvm::json::abbreviate(), llvm::json::abbreviateChildren(), kind(), and llvm::json::OStream::value().