diff --git a/src/json_encode.c b/src/json_encode.c new file mode 100644 index 00000000..6c654a54 --- /dev/null +++ b/src/json_encode.c @@ -0,0 +1,41 @@ +#include "json_encode.h" + +char *json_encode_string(char *str) { + char *ptr = str; + char_array *json_encoded = char_array_new_size(strlen(str) + 2); + char_array_push(json_encoded, '"'); + + while (*ptr) { + char ch = *ptr; + switch (ch) { + case '\\': + char_array_append(json_encoded, "\\\\"); + break; + case '"': + char_array_append(json_encoded, "\\\""); + break; + case '\n': + char_array_append(json_encoded, "\\n"); + break; + case '\r': + char_array_append(json_encoded, "\\r"); + break; + case '\t': + char_array_append(json_encoded, "\\t"); + break; + case '\b': + char_array_append(json_encoded, "\\\b"); + break; + case '\f': + char_array_append(json_encoded, "\\\f"); + break; + default: + char_array_push(json_encoded, ch); + } + ptr++; + } + char_array_push(json_encoded, '"'); + char_array_terminate(json_encoded); + + return char_array_to_string(json_encoded); +} \ No newline at end of file diff --git a/src/json_encode.h b/src/json_encode.h new file mode 100644 index 00000000..67066f72 --- /dev/null +++ b/src/json_encode.h @@ -0,0 +1,14 @@ +#ifndef JSON_ENCODE_H +#define JSON_ENCODE_H + +#include +#include +#include + +#include "collections.h" +#include "string_utils.h" +#include "utf8proc/utf8proc.h" + +char *json_encode_string(char *str); + +#endif \ No newline at end of file