log_sds escape_json()

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;
}