fix: escape json strings
This commit is contained in:
parent
b97a2ea63c
commit
b3c3a5fa85
@ -24,7 +24,7 @@ public:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
result += L"\"" + it->value + L"\"";
|
result += L"\"" + EscapeJson(it->value) + L"\"";
|
||||||
}
|
}
|
||||||
if (std::next(it) != nodes.end())
|
if (std::next(it) != nodes.end())
|
||||||
{
|
{
|
||||||
@ -36,4 +36,30 @@ public:
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const std::wstring EscapeJson(const std::wstring& input) const
|
||||||
|
{
|
||||||
|
std::wstringstream o;
|
||||||
|
for (auto c = input.cbegin(); c != input.cend(); c++) {
|
||||||
|
switch (*c) {
|
||||||
|
case '"': o << "\\\""; break;
|
||||||
|
case '\\': o << "\\\\"; break;
|
||||||
|
case '\b': o << "\\b"; break;
|
||||||
|
case '\f': o << "\\f"; break;
|
||||||
|
case '\n': o << "\\n"; break;
|
||||||
|
case '\r': o << "\\r"; break;
|
||||||
|
case '\t': o << "\\t"; break;
|
||||||
|
default:
|
||||||
|
if ('\x00' <= *c && *c <= '\x1f') {
|
||||||
|
o << "\\u"
|
||||||
|
<< std::hex << std::setw(4) << std::setfill(L'0') << static_cast<int>(*c);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
o << *c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return o.str();
|
||||||
|
}
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user