12#include <initializer_list>
56 [[nodiscard]]
bool has(
const string& key)
const;
57 [[nodiscard]]
const Json*
find(
const string& key)
const;
59 [[nodiscard]]
const Json&
at(
const string& key)
const;
67 [[nodiscard]]
static Json parse(
const string& text);
68 [[nodiscard]]
string dump(
int indent = 2)
const;
76 void load(
const filesystem::path& path);
77 void save(
const filesystem::path& path,
int indent = 2)
const;
94 void add_field(
const string& name,
const string& value);
96 [[nodiscard]]
string c_str(
int indent = 2)
const;
101 vector<string> name_stack;
105 const string& value);
108 initializer_list<pair<const char*, string>> props);
115 initializer_list<string> names);
119template<
typename Func>
123 throw runtime_error(format(
"Missing JSON parent for: {}", tag));
125 const Json* arr = parent->
find(tag);
127 throw runtime_error(format(
"Missing or wrong-size JSON array: {}", tag));
129 for (
long i = 0; i < count; i++)
void load(const filesystem::path &path)
void save(const filesystem::path &path, int indent=2) const
static JsonDocument wrap(const string &tag, Json value)
Json root
Definition json.h:74
const Json * first_child() const
Definition json.h:79
const Json * first_child(const string &name) const
void begin_array_object()
void add_field(const string &name, const string &value)
string c_str(int indent=2) const
void open_element(const string &name)
void begin_array(const string &name)
Json(const char *s)
Definition json.h:44
Json & operator[](const string &key)
Kind kind
Definition json.h:27
bool has(const string &key) const
bool is_number() const
Definition json.h:52
const Json * find(const string &key) const
Json(float d)
Definition json.h:43
string dump(int indent=2) const
string string_value
Definition json.h:30
Json(bool b)
Definition json.h:35
bool is_array() const
Definition json.h:54
Json & set(const string &key, Json value)
Json(long long i)
Definition json.h:38
vector< pair< string, Json > > object_value
Definition json.h:32
bool is_object() const
Definition json.h:55
Json(long i)
Definition json.h:37
bool bool_value
Definition json.h:28
vector< Json > array_value
Definition json.h:31
Json(const string &s)
Definition json.h:45
Json(double d)
Definition json.h:42
Json(unsigned int i)
Definition json.h:39
const Json & at(const string &key) const
Json(int i)
Definition json.h:36
static Json parse(const string &text)
static Json make_object()
double number_value
Definition json.h:29
const Json * first_child(const string &key) const
Definition json.h:58
void push_back(Json value)
bool is_bool() const
Definition json.h:51
bool is_string() const
Definition json.h:53
bool is_null() const
Definition json.h:50
@ String
Definition json.h:25
@ Array
Definition json.h:25
@ Object
Definition json.h:25
@ Number
Definition json.h:25
@ Null
Definition json.h:25
@ Bool
Definition json.h:25
Json(unsigned long i)
Definition json.h:40
Json(unsigned long long i)
Definition json.h:41
Definition adaptive_moment_estimation.h:14
const Json * get_json_root(const JsonDocument &document, const string &tag)
void add_json_field(JsonWriter &writer, const string &name, const string &value)
long read_json_index(const Json *root, const string &field)
JsonDocument load_json_file(const filesystem::path &file_name)
const Json * require_json_field(const Json *root, const string &field)
string read_json_string_fallback(const Json *root, initializer_list< string > names)
void for_json_items(const Json *parent, const char *tag, long count, Func func)
Definition json.h:120
string read_json_string(const Json *root, const string &field)
void write_json(JsonWriter &writer, initializer_list< pair< const char *, string > > props)
bool read_json_bool(const Json *root, const string &field)
float read_json_type(const Json *root, const string &field)