in parson.c [865:910]
static _Ptr<JSON_Value> parse_array_value(_Ptr<_Nt_array_ptr<const char>> string, size_t nesting) {
_Ptr<JSON_Value> output_value = NULL;
_Ptr<JSON_Value> new_array_value = NULL;
_Ptr<JSON_Array> output_array = NULL;
output_value = json_value_init_array();
if (output_value == NULL) {
return NULL;
}
if (**string != '[') {
json_value_free(output_value);
return NULL;
}
output_array = json_value_get_array(output_value);
SKIP_CHAR(string);
SKIP_WHITESPACES(string);
if (**string == ']') { /* empty array */
SKIP_CHAR(string);
return output_value;
}
while (**string != '\0') {
new_array_value = parse_value(string, nesting);
if (new_array_value == NULL) {
json_value_free(output_value);
return NULL;
}
if (json_array_add(output_array, new_array_value) == JSONFailure) {
json_value_free(new_array_value);
json_value_free(output_value);
return NULL;
}
SKIP_WHITESPACES(string);
if (**string != ',') {
break;
}
SKIP_CHAR(string);
SKIP_WHITESPACES(string);
}
SKIP_WHITESPACES(string);
if (**string != ']' || /* Trim array after parsing is over */
json_array_resize(output_array, json_array_get_count(output_array)) == JSONFailure) {
json_value_free(output_value);
return NULL;
}
SKIP_CHAR(string);
return output_value;
}