// (C) 2017 <>< Joshua Allen, Under MIT/x11 License. #define _GNU_SOURCE #include #include #include #include "json_helpers.h" #include void json_write_float_array(FILE* f, const char* tag, float* v, uint8_t count) { uint8_t i = 0; char * str1 = NULL; char * str2 = NULL; asprintf(&str1,"\"%s\":[", tag); for (i=0;i=npos) return NULL; char* x = malloc(l); memcpy(x,str+start,l); x[l-1] = '\0'; return x; } static uint16_t json_load_array(const char* JSON_STRING, jsmntok_t* tokens, uint16_t size, char* tag) { jsmntok_t* t = tokens; uint16_t i = 0; char* values[size]; for (i=0;istart, t->end, JSON_STRING_LEN); } if (json_tag_value != NULL) json_tag_value(tag, values, i); for (i=0;istart, tag_t->end, JSON_STRING_LEN); char* value = substr(JSON_STRING, value_t->start, value_t->end, JSON_STRING_LEN); printf("%d %d c:%d %d %s \n", tag_t->start, tag_t->end, tag_t->size, tag_t->type, tag); if (value_t->type == JSMN_ARRAY) { i += json_load_array(JSON_STRING, tokens+i+2,value_t->size, tag); //look at array children } else if (value_t->type == JSMN_OBJECT) { printf("Begin Object\n"); if (json_begin_object != NULL) json_begin_object(tag); children = value_t->size +1; //+1 to account for this loop where we are not yed parsing children // i += decode_jsmn_object(JSON_STRING, tokens+i+2,value_t->size); } else { if (json_tag_value != NULL) json_tag_value(tag, &value, 1); } if (children>=0) children--; if (children == 0) { children = -1; printf("End Object\n"); if (json_end_object!=NULL) json_end_object(); } // printf("%d %s \n", value_t->type, tag); free(tag); free(value); } free(JSON_STRING); }