12#include <initializer_list>
55 bool has(
const std::string& key)
const;
56 const Json*
find(
const std::string& key)
const;
58 const Json&
at(
const std::string& key)
const;
67 std::string
dump(
int indent = 2)
const;
75 void load(
const std::filesystem::path& path);
76 void save(
const std::filesystem::path& path,
int indent = 2)
const;
93 void add_field(
const std::string& name,
const std::string& value);
95 std::string
c_str(
int indent = 2)
const;
99 std::vector<Json*> stack;
100 std::vector<std::string> name_stack;
103 const std::string& name,
104 const std::string& value);
107 std::initializer_list<std::pair<const char*, std::string>> props);
114 std::initializer_list<std::string> names);
118template<
typename Func>
122 throw std::runtime_error(std::string(
"Missing JSON parent for: ") + tag);
124 const Json* arr = parent->
find(tag);
126 throw std::runtime_error(std::string(
"Missing or wrong-size JSON array: ") + tag);
128 for (
long i = 0; i < count; i++)
static JsonDocument wrap(const std::string &tag, Json value)
const Json * first_child(const std::string &name) const
void load(const std::filesystem::path &path)
void save(const std::filesystem::path &path, int indent=2) const
Json root
Definition json.h:73
const Json * first_child() const
Definition json.h:78
void begin_array(const std::string &name)
void begin_array_object()
void add_field(const std::string &name, const std::string &value)
void open_element(const std::string &name)
std::string c_str(int indent=2) const
Json(const std::string &s)
Definition json.h:44
Json(const char *s)
Definition json.h:43
const Json * find(const std::string &key) const
Kind kind
Definition json.h:26
const Json & at(const std::string &key) const
bool is_number() const
Definition json.h:51
Json(float d)
Definition json.h:42
Json(bool b)
Definition json.h:34
bool is_array() const
Definition json.h:53
std::string dump(int indent=2) const
Json(long long i)
Definition json.h:37
std::vector< Json > array_value
Definition json.h:30
const Json * first_child(const std::string &key) const
Definition json.h:57
bool is_object() const
Definition json.h:54
Json(long i)
Definition json.h:36
bool bool_value
Definition json.h:27
bool has(const std::string &key) const
Json(double d)
Definition json.h:41
Json(unsigned int i)
Definition json.h:38
Json(int i)
Definition json.h:35
std::vector< std::pair< std::string, Json > > object_value
Definition json.h:31
static Json make_object()
double number_value
Definition json.h:28
Json & set(const std::string &key, Json value)
void push_back(Json value)
bool is_bool() const
Definition json.h:50
Json & operator[](const std::string &key)
bool is_string() const
Definition json.h:52
bool is_null() const
Definition json.h:49
std::string as_string() const
@ String
Definition json.h:24
@ Array
Definition json.h:24
@ Object
Definition json.h:24
@ Number
Definition json.h:24
@ Null
Definition json.h:24
@ Bool
Definition json.h:24
static Json parse(const std::string &text)
Json(unsigned long i)
Definition json.h:39
std::string string_value
Definition json.h:29
Json(unsigned long long i)
Definition json.h:40
Definition adaptive_moment_estimation.h:19
const Json * get_json_root(const JsonDocument &document, const std::string &tag)
long read_json_index(const Json *root, const std::string &field)
JsonDocument load_json_file(const std::filesystem::path &file_name)
float read_json_type(const Json *root, const std::string &field)
void add_json_field(JsonWriter &writer, const std::string &name, const std::string &value)
bool read_json_bool(const Json *root, const std::string &field)
void for_json_items(const Json *parent, const char *tag, long count, Func func)
Definition json.h:119
std::string read_json_string_fallback(const Json *root, std::initializer_list< std::string > names)
std::string read_json_string(const Json *root, const std::string &field)
const Json * require_json_field(const Json *root, const std::string &field)
void write_json(JsonWriter &writer, std::initializer_list< std::pair< const char *, std::string > > props)