disable utf-8 escaping in json.stringify by default & add utfEscape argument to json.stringify & update network.post behaviour for pre-serialized data
This commit is contained in:
+20
-12
@@ -41,7 +41,8 @@ void stringifyObj(
|
||||
std::stringstream& ss,
|
||||
int indent,
|
||||
const std::string& indentstr,
|
||||
bool nice
|
||||
bool nice,
|
||||
bool escapeUtf8
|
||||
);
|
||||
|
||||
void stringifyList(
|
||||
@@ -49,7 +50,8 @@ void stringifyList(
|
||||
std::stringstream& ss,
|
||||
int indent,
|
||||
const std::string& indentstr,
|
||||
bool nice
|
||||
bool nice,
|
||||
bool escapeUtf8
|
||||
);
|
||||
|
||||
void stringifyValue(
|
||||
@@ -57,16 +59,17 @@ void stringifyValue(
|
||||
std::stringstream& ss,
|
||||
int indent,
|
||||
const std::string& indentstr,
|
||||
bool nice
|
||||
bool nice,
|
||||
bool escapeUtf8
|
||||
) {
|
||||
using dv::value_type;
|
||||
|
||||
switch (value.getType()) {
|
||||
case value_type::object:
|
||||
stringifyObj(value, ss, indent, indentstr, nice);
|
||||
stringifyObj(value, ss, indent, indentstr, nice, escapeUtf8);
|
||||
break;
|
||||
case value_type::list:
|
||||
stringifyList(value, ss, indent, indentstr, nice);
|
||||
stringifyList(value, ss, indent, indentstr, nice, escapeUtf8);
|
||||
break;
|
||||
case value_type::bytes: {
|
||||
const auto& bytes = value.asBytes();
|
||||
@@ -75,7 +78,7 @@ void stringifyValue(
|
||||
break;
|
||||
}
|
||||
case value_type::string:
|
||||
ss << util::escape(value.asString(), !nice);
|
||||
ss << util::escape(value.asString(), escapeUtf8);
|
||||
break;
|
||||
case value_type::number:
|
||||
ss << std::setprecision(15) << value.asNumber();
|
||||
@@ -97,7 +100,8 @@ void stringifyList(
|
||||
std::stringstream& ss,
|
||||
int indent,
|
||||
const std::string& indentstr,
|
||||
bool nice
|
||||
bool nice,
|
||||
bool escapeUtf8
|
||||
) {
|
||||
if (list.empty()) {
|
||||
ss << "[]";
|
||||
@@ -109,7 +113,7 @@ void stringifyList(
|
||||
newline(ss, nice, indent, indentstr);
|
||||
}
|
||||
const auto& value = list[i];
|
||||
stringifyValue(value, ss, indent + 1, indentstr, nice);
|
||||
stringifyValue(value, ss, indent + 1, indentstr, nice, escapeUtf8);
|
||||
if (i + 1 < list.size()) {
|
||||
ss << ',';
|
||||
}
|
||||
@@ -125,7 +129,8 @@ void stringifyObj(
|
||||
std::stringstream& ss,
|
||||
int indent,
|
||||
const std::string& indentstr,
|
||||
bool nice
|
||||
bool nice,
|
||||
bool escapeUtf8
|
||||
) {
|
||||
if (obj.empty()) {
|
||||
ss << "{}";
|
||||
@@ -138,7 +143,7 @@ void stringifyObj(
|
||||
newline(ss, nice, indent, indentstr);
|
||||
}
|
||||
ss << util::escape(key) << ": ";
|
||||
stringifyValue(value, ss, indent + 1, indentstr, nice);
|
||||
stringifyValue(value, ss, indent + 1, indentstr, nice, escapeUtf8);
|
||||
index++;
|
||||
if (index < obj.size()) {
|
||||
ss << ',';
|
||||
@@ -151,10 +156,13 @@ void stringifyObj(
|
||||
}
|
||||
|
||||
std::string json::stringify(
|
||||
const dv::value& value, bool nice, const std::string& indent
|
||||
const dv::value& value,
|
||||
bool nice,
|
||||
const std::string& indent,
|
||||
bool escapeUtf8
|
||||
) {
|
||||
std::stringstream ss;
|
||||
stringifyValue(value, ss, 1, indent, nice);
|
||||
stringifyValue(value, ss, 1, indent, nice, escapeUtf8);
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
|
||||
+4
-1
@@ -11,6 +11,9 @@ namespace json {
|
||||
dv::value parse(std::string_view source);
|
||||
|
||||
std::string stringify(
|
||||
const dv::value& value, bool nice, const std::string& indent=" "
|
||||
const dv::value& value,
|
||||
bool nice,
|
||||
const std::string& indent = " ",
|
||||
bool escapeUtf8 = false
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user