49 lines
1.2 KiB
C++
49 lines
1.2 KiB
C++
#include "utils/json.hh"
|
|
#include <sstream>
|
|
|
|
namespace ppc::data::json {
|
|
std::string stringify(const data::value_t &val) {
|
|
std::stringstream out;
|
|
bool first = true;
|
|
|
|
if (val.is_array()) {
|
|
out << '[';
|
|
|
|
for (const auto &el : val.array()) {
|
|
if (el.is_null()) continue;
|
|
if (!first) out << ',';
|
|
first = false;
|
|
out << stringify(el);
|
|
}
|
|
|
|
out << ']';
|
|
}
|
|
else if (val.is_map()) {
|
|
out << '{';
|
|
|
|
for (const auto &el : val.map()) {
|
|
if (el.second.is_null()) continue;
|
|
if (!first) out << ',';
|
|
first = false;
|
|
out << '"' << el.first << '"' << ':' << stringify(el.second);
|
|
}
|
|
|
|
out << '}';
|
|
}
|
|
else if (val.is_bool()) {
|
|
if (val.boolean()) out << "true";
|
|
else out << "false";
|
|
}
|
|
else if (val.is_null()) {
|
|
out << "null";
|
|
}
|
|
else if (val.is_number()) {
|
|
out << val.number();
|
|
}
|
|
else if (val.is_string()) {
|
|
out << '"' << val.string() << '"';
|
|
}
|
|
|
|
return out.str();
|
|
}
|
|
} |