you are calling realloc and assigning the value directly before checking the return value. realloc can fail and return NULL and you'll overwrite the previous pointer which will cause a memory leak.
I don't see why you duplicated strndup in parson_strndup.
https://github.com/kgabis/parson/blob/master/parson.c#L129
parson_strdup can return NULL and this statement will fail silently.