in Sources/aliyun-log-c-sdk/log_builder.c [375:396]
log_sds escape_json(char **value) {
size_t len = strlen(*value);
log_sds result = log_sdsnewEmpty(len);
for (int i = 0; i < len; i ++) {
switch ((*value)[i]) {
case '"': result = log_sdscat(result, "\\\""); break;
case '\\': result = log_sdscat(result, "\\\\"); break;
case '\b': result = log_sdscat(result, "\\b"); break;
case '\f': result = log_sdscat(result, "\\f"); break;
case '\n': result = log_sdscat(result, "\\n"); break;
case '\r': result = log_sdscat(result, "\\r"); break;
case '\t': result = log_sdscat(result, "\\t"); break;
default:
if ('\x00' <= (*value)[i] && (*value)[i] <= '\x1f') {
result = log_sdscatprintf(result, "%s%04X","\\u", (int)(*value)[i]);
} else {
result = log_sdscatchar(result, (*value)[i]);
}
}
}
return result;
}