diff --git a/src/jplist.c b/src/jplist.c
index 889ce30..3d3cad2 100644
--- a/src/jplist.c
+++ b/src/jplist.c
@@ -462,19 +462,9 @@
     return val;
 }
 
-static plist_t parse_string(const char* js, jsmntok_t* tokens, int* index)
+static char* unescape_string(const char* str_val, size_t str_len, size_t *new_len)
 {
-    if (tokens[*index].type != JSMN_STRING) {
-        PLIST_JSON_ERR("%s: token type != JSMN_STRING\n", __func__);
-        return NULL;
-    }
-
-    const char* str_val = js + tokens[*index].start;
-    size_t str_len = tokens[*index].end - tokens[*index].start;
     char* strval = strndup(str_val, str_len);
-    plist_t node;
-
-    /* unescape */
     size_t i = 0;
     while (i < str_len) {
         if (strval[i] == '\\' && i < str_len-1) {
@@ -543,6 +533,23 @@
         }
         i++;
     }
+    strval[str_len] = '\0';
+    if (new_len) {
+        *new_len = str_len;
+    }
+    return strval;
+}
+
+static plist_t parse_string(const char* js, jsmntok_t* tokens, int* index)
+{
+    if (tokens[*index].type != JSMN_STRING) {
+        PLIST_JSON_ERR("%s: token type != JSMN_STRING\n", __func__);
+        return NULL;
+    }
+
+    size_t str_len = 0; ;
+    char* strval = unescape_string(js + tokens[*index].start, tokens[*index].end - tokens[*index].start, &str_len);
+    plist_t node;
 
     plist_data_t data = plist_new_plist_data();
     data->type = PLIST_STRING;
@@ -604,7 +611,7 @@
     int j = (*index)+1;
     for (num = 0; num < num_tokens; num++) {
         if (tokens[j].type == JSMN_STRING) {
-            char* key = strndup(js + tokens[j].start, tokens[j].end - tokens[j].start);
+            char* key = unescape_string(js + tokens[j].start, tokens[j].end - tokens[j].start, NULL);
             plist_t val = NULL;
             j++;
             num++;
