X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fjsmn%2Fexample%2Fmaptest.c;h=7cceabb8ea2e7494d470f68aa45ab01a2ac30bf8;hb=f1605e99959acfb32b36ae875601fc14dd670742;hp=ca2902b5c3b1b7c522b06413f1eb62b22eb68736;hpb=efd8d31e1f3d7a1afc81496d9ce64eec48c8f36a;p=16.git diff --git a/src/lib/jsmn/example/maptest.c b/src/lib/jsmn/example/maptest.c old mode 100644 new mode 100755 index ca2902b5..7cceabb8 --- a/src/lib/jsmn/example/maptest.c +++ b/src/lib/jsmn/example/maptest.c @@ -1,15 +1,30 @@ #include #include +#include +//#include #include "../jsmn.c" +//#define BUFSIZ 2048 + /* * A small example of jsmn parsing when JSON structure is known and number of * tokens is predictable. */ -const char *JSON_STRING = +/*char *json_string = "{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n " - "\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}"; + "\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}";*/ + +long int filesize(FILE *fp) +{ + long int save_pos, size_of_file; + + save_pos = ftell(fp); + fseek(fp, 0L, SEEK_END); + size_of_file = ftell(fp); + fseek(fp, save_pos, SEEK_SET); + return(size_of_file); +} static int jsoneq(const char *json, jsmntok_t *tok, const char *s) { if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start && @@ -22,11 +37,38 @@ static int jsoneq(const char *json, jsmntok_t *tok, const char *s) { int main() { int i; int r; + size_t z; jsmn_parser p; - jsmntok_t t[128]; /* We expect no more than 128 tokens */ + jsmntok_t t[(BUFSIZ/sizeof(jsmntok_t))*2]; /* We expect no more than 128 tokens */ + FILE *fh = fopen("../../../../data/test.map", "r"); + char *json_string = malloc(filesize(fh)); + + if(fh != NULL) + { + /*t = malloc(2048); + if (t == NULL) { + fprintf(stderr, "malloc(): errno=%d\n", errno); + return 3; + }*/ + //printf("\n%d\n\n", sizeof(*t)); + printf("\n%d", sizeof(*t)); + printf("\n%d", sizeof(t)); + printf("\n%d\n\n", sizeof(t)/sizeof(t[0])); + z = fread(json_string, 1, filesize(fh), fh); + //char json_s[2048]; + fclose(fh); fh = NULL; + printf("[%d]\n", z); + json_string[z] = '\0'; + // we can now close the file + //printf("]%s[\n", json_s); + //json_string=json_s; + //printf("[[%s]]\n", json_string); jsmn_init(&p); - r = jsmn_parse(&p, JSON_STRING, strlen(JSON_STRING), t, sizeof(t)/sizeof(t[0])); + r = jsmn_parse(&p, json_string, strlen(json_string), t, sizeof(t)/sizeof(t[0])); + //t[(BUFSIZ/sizeof(jsmntok_t))*2+1].type=JSMN_OBJECT; + printf("[\n%s\n]", json_string); + printf("[[%d]]\n",r); if (r < 0) { printf("Failed to parse JSON: %d\n", r); return 1; @@ -40,36 +82,41 @@ int main() { /* Loop over all keys of the root object */ for (i = 1; i < r; i++) { - if (jsoneq(JSON_STRING, &t[i], "user") == 0) { + if (jsoneq(json_string, &t[i], "image") == 0) { /* We may use strndup() to fetch string value */ - printf("- User: %.*s\n", t[i+1].end-t[i+1].start, - JSON_STRING + t[i+1].start); + printf("- image: %.*s\n", t[i+1].end-t[i+1].start, + json_string + t[i+1].start); i++; - } else if (jsoneq(JSON_STRING, &t[i], "admin") == 0) { + } else if (jsoneq(json_string, &t[i], "admin") == 0) { /* We may additionally check if the value is either "true" or "false" */ printf("- Admin: %.*s\n", t[i+1].end-t[i+1].start, - JSON_STRING + t[i+1].start); + json_string + t[i+1].start); i++; - } else if (jsoneq(JSON_STRING, &t[i], "uid") == 0) { + } else if (jsoneq(json_string, &t[i], "uid") == 0) { /* We may want to do strtol() here to get numeric value */ printf("- UID: %.*s\n", t[i+1].end-t[i+1].start, - JSON_STRING + t[i+1].start); + json_string + t[i+1].start); i++; - } else if (jsoneq(JSON_STRING, &t[i], "groups") == 0) { + } else if (jsoneq(json_string, &t[i], "tilesets") == 0) { int j; - printf("- Groups:\n"); + printf("- tilesets:\n"); if (t[i+1].type != JSMN_ARRAY) { continue; /* We expect groups to be an array of strings */ } for (j = 0; j < t[i+1].size; j++) { jsmntok_t *g = &t[i+j+2]; - printf(" * %.*s\n", g->end - g->start, JSON_STRING + g->start); + printf(" * %.*s\n", g->end - g->start, json_string + g->start); } i += t[i+1].size + 1; } else { - printf("Unexpected key: %.*s\n", t[i].end-t[i].start, - JSON_STRING + t[i].start); + /*printf("Unexpected key: %.*s\n", t[i].end-t[i].start, + json_string + t[i].start);*/ } } + + //free(json_string); + } + if (fh != NULL) fclose(fh); + ////} return 0; }