30inline std::string
escape(
const std::string &str) {
32 result.reserve(str.size() + 16);
58 if (
static_cast<unsigned char>(c) < 0x20) {
61 snprintf(buf,
sizeof(buf),
"\\u%04x",
static_cast<unsigned char>(c));
99 v.str_val_ = serialized;
106 v.str_val_ = serialized;
115 return bool_val_ ?
"true" :
"false";
117 return std::to_string(int_val_);
119 return std::to_string(uint_val_);
121 std::ostringstream oss;
126 return "\"" +
escape(str_val_) +
"\"";
136 bool bool_val_ =
false;
137 int64_t int_val_ = 0;
139 double double_val_ = 0.0;
140 std::string str_val_;
151 values_.push_back(value);
163 std::string result =
"[";
165 for (
const auto &v : values_) {
169 result += v.toString();
176 return values_.empty();
178 [[nodiscard]]
size_t size()
const {
179 return values_.size();
183 std::vector<JsonValue> values_;
194 keys_.push_back(key);
195 values_.push_back(value);
200 keys_.push_back(key);
206 keys_.push_back(key);
212 std::string result =
"{";
213 for (
size_t i = 0; i < keys_.size(); i++) {
216 result +=
"\"" +
escape(keys_[i]) +
"\":" + values_[i].toString();
223 return keys_.empty();
225 [[nodiscard]]
size_t size()
const {
230 std::vector<std::string> keys_;
231 std::vector<JsonValue> values_;
JsonArray & add(const JsonArray &arr)
std::string toString() const
JsonArray & add(const JsonValue &value)
std::string toString() const
JsonObject & set(const std::string &key, const JsonObject &obj)
JsonObject & set(const std::string &key, const JsonArray &arr)
JsonObject & set(const std::string &key, const JsonValue &value)
JSON value wrapper (can hold any JSON type)
JsonValue(std::nullptr_t)
static JsonValue fromObject(const std::string &serialized)
static JsonValue fromArray(const std::string &serialized)
JsonValue(std::string &&s)
JsonValue(const std::string &s)
std::string toString() const
unsigned long long uint64_t
std::string escape(const std::string &str)
Escape a string for JSON output.