From 7994a69cce701cad83f52ce246e4181cb5be0f88 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Sat, 21 Mar 2015 15:19:23 -0500 Subject: [PATCH] modified: src/lib/jsmn/example/MAPTEST.EXE modified: src/lib/jsmn/example/maptest modified: src/lib/jsmn/example/maptest.c new file: src/lib/jsmn/example/maptest2.c --- src/lib/jsmn/example/MAPTEST.EXE | Bin 14260 -> 14260 bytes src/lib/jsmn/example/maptest | Bin 10152 -> 10152 bytes src/lib/jsmn/example/maptest.c | 4 +- src/lib/jsmn/example/maptest2.c | 107 +++++++++++++++++++++++++++++++ 4 files changed, 109 insertions(+), 2 deletions(-) create mode 100644 src/lib/jsmn/example/maptest2.c diff --git a/src/lib/jsmn/example/MAPTEST.EXE b/src/lib/jsmn/example/MAPTEST.EXE index 12a0c0c95895deef2c717e18c00268b97ddd647b..697c8c9e15fff509eb906a22ae4dd12c47a11175 100644 GIT binary patch delta 296 zcmdmzza@VIKWqK3-3$_jmwMa2JbzKl*7~g^xAVgbr~jQFI}h(-WB?17vw^6^BFw#R zUtaM1-@(8Z08}IQzgr9_)c0k3=V6e<`9Cu{-TnY23OJ6t{bFGFZzjUL!;T@~MH5H! z5teSZKdlF9MFMs>0!0cyB0CrvUOF?rR4`$*Wn`#fZ`k)`J7WpYj%c8KAW)v^_5FQ} z4Ay0TCa-4|=Xm?CH-xb>?BC>btWqM}KxwwlYcJ0;EEHkh-N?{+>cx)9e^{kO@2~?U zy378(oDY_n29oKRtiz_lll-ssKxx2^4M4+ZOpal*WsI6Ui%m)19HhbR<@0~tZogU& blrXaU6I1 z!vGdoEW+ID_T>fB{~Zi$0SiT#UnDShivh*@zHIM243atWXGW*nzyD?;%scED0$wz7 zG#_ERB?qvA^wMq5UP8uo^LU$!%r@a%{N$_D`DnO@)D z$H-t^_HXh!R&kCu|9V3hJHviWKFca4!UdFO>%8{zJOj}7-Hi;Lr(SHI{F_x;^fo(C zqPy(Z%lTlLX&{;Q$=YlxJV`*?O9OUn02)4hax|MQW8~zSY)W!wAPsIWpa1K2`_p=$ ag!u(CyWxS(H?i??QIXMyH{W8rWdHzBH;D}Z diff --git a/src/lib/jsmn/example/maptest b/src/lib/jsmn/example/maptest index 5f954f9a205c691527c4d39191cdd7e8089ee1fa..3f32276d67d9c9bc25c80b3ef874de64395441e8 100644 GIT binary patch delta 312 zcmZ4Czrue*1*1r_pUN*;c{K!OULt}meCH@|>Y9e4e} z00avm25uQIn*zFw|0c5wCNnOboGqv;nezv1SL*@()_p+BfG)_0 z1*x1rd81$f_q&e}_qx7eoUAAyI@wXEgfVLJHX&t6H;Bv*kPCZLe?&&d_9p&0oHikC e^LwE{7RI81q-2K0WaLXP8Q%-k}~@R z5?APSeF2r?2*`Ldg@xnA%E^iR5{wfjSMh5xE}guT--=Ow@&o>4#$%IR1az5t|4x3$ zFELqG&~@?!0aiwn$=85_zyCl5y%-lw&Jfg<%=`nkwDkag>pq~ffNsf%oeDI2&g6B1 z1&psJ%L`3r44=GNNLkGJBUt4Qu=7wa{vIRG +#include +#include +#include "../jsmn.c" + +/* + * A small example of jsmn parsing when JSON structure is known and number of + * tokens is predictable. + */ + +/*char *JSON_S = + "{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n " + "\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}";*/ + +char *JSON_STRING; + +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 && + strncmp(json + tok->start, s, tok->end - tok->start) == 0) { + return 0; + } + return -1; +} + +int main() { + int i; + int r; + jsmn_parser p; + FILE *fh = fopen("../../../../data/test.map", "r"); + jsmntok_t t[1536]; /* We expect no more than 128 tokens */ + char JSON_S[6144]; + memset(JSON_S, 0, sizeof(JSON_S)); + + if(fh != NULL) + { + fread(JSON_S, sizeof(char), filesize(fh), fh); + // 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, filesize(fh), t, sizeof(t)/sizeof(t[0])); + fclose(fh); fh = NULL; + printf("%s", JSON_STRING); + if (r < 0) { + printf("Failed to parse JSON: %d\n", r); + return 1; + } + + /* Assume the top-level element is an object */ + if (r < 1 || t[0].type != JSMN_OBJECT) { + printf("Object expected\n"); + return 1; + } + + /* Loop over all keys of the root object */ + for (i = 1; i < r; i++) { + if (jsoneq(JSON_STRING, &t[i], "image") == 0) { + /* We may use strndup() to fetch string value */ + 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) { + /* 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); + i++; + } 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); + i++; + } else if (jsoneq(JSON_STRING, &t[i], "tilesets") == 0) { + int j; + 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); + } + i += t[i+1].size + 1; + } else { + 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; +} -- 2.39.5