#include "JsonUtil.h" #include std::string jsonEscape(const std::string& value) { std::string out; out.reserve(value.size()); for (char ch : value) { switch (ch) { case '\\': out += "\\\\"; break; case '"': out += "\\\""; break; case '\n': out += "\\n"; break; case '\r': out += "\\r"; break; case '\t': out += "\\t"; break; default: out += ch; break; } } return out; } std::optional findJsonFloat(const std::string& body, const std::string& key) { const std::string quotedKey = "\"" + key + "\""; size_t pos = body.find(quotedKey); if (pos == std::string::npos) return std::nullopt; pos = body.find(':', pos + quotedKey.size()); if (pos == std::string::npos) return std::nullopt; ++pos; while (pos < body.size() && (body[pos] == ' ' || body[pos] == '\t' || body[pos] == '\r' || body[pos] == '\n')) ++pos; size_t end = pos; while (end < body.size() && (body[end] == '-' || body[end] == '+' || body[end] == '.' || (body[end] >= '0' && body[end] <= '9') || body[end] == 'e' || body[end] == 'E')) ++end; float value = 0.0f; const auto result = std::from_chars(body.data() + pos, body.data() + end, value); if (result.ec != std::errc()) return std::nullopt; return value; }