From: sparky4 Date: Thu, 19 Mar 2015 10:03:36 +0000 (-0500) Subject: new file: src/lib/jsmn/example/JSONDUMP.EXE X-Git-Url: http://4ch.mooo.com/gitweb/?a=commitdiff_plain;h=efd8d31e1f3d7a1afc81496d9ce64eec48c8f36a;p=16.git new file: src/lib/jsmn/example/JSONDUMP.EXE new file: src/lib/jsmn/example/SIMPLE.EXE new file: src/lib/jsmn/example/jsondump modified: src/lib/jsmn/example/jsondump.c new file: src/lib/jsmn/example/maptest.c modified: src/lib/jsmn/example/simple.c --- diff --git a/src/lib/jsmn/example/JSONDUMP.EXE b/src/lib/jsmn/example/JSONDUMP.EXE new file mode 100644 index 00000000..fc4c97a4 Binary files /dev/null and b/src/lib/jsmn/example/JSONDUMP.EXE differ diff --git a/src/lib/jsmn/example/SIMPLE.EXE b/src/lib/jsmn/example/SIMPLE.EXE new file mode 100644 index 00000000..77ee0f40 Binary files /dev/null and b/src/lib/jsmn/example/SIMPLE.EXE differ diff --git a/src/lib/jsmn/example/jsondump b/src/lib/jsmn/example/jsondump new file mode 100644 index 00000000..bf6541f5 Binary files /dev/null and b/src/lib/jsmn/example/jsondump differ diff --git a/src/lib/jsmn/example/jsondump.c b/src/lib/jsmn/example/jsondump.c index 3490bbf4..04d9f5ae 100644 --- a/src/lib/jsmn/example/jsondump.c +++ b/src/lib/jsmn/example/jsondump.c @@ -2,7 +2,7 @@ #include #include #include -#include "../jsmn.h" +#include "../jsmn.c" /* * An example of reading JSON from stdin and printing its content to stdout. diff --git a/src/lib/jsmn/example/maptest.c b/src/lib/jsmn/example/maptest.c new file mode 100644 index 00000000..ca2902b5 --- /dev/null +++ b/src/lib/jsmn/example/maptest.c @@ -0,0 +1,75 @@ +#include +#include +#include "../jsmn.c" + +/* + * A small example of jsmn parsing when JSON structure is known and number of + * tokens is predictable. + */ + +const char *JSON_STRING = + "{\"user\": \"johndoe\", \"admin\": false, \"uid\": 1000,\n " + "\"groups\": [\"users\", \"wheel\", \"audio\", \"video\"]}"; + +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; + jsmntok_t t[128]; /* We expect no more than 128 tokens */ + + jsmn_init(&p); + r = jsmn_parse(&p, JSON_STRING, strlen(JSON_STRING), t, sizeof(t)/sizeof(t[0])); + 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], "user") == 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); + 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], "groups") == 0) { + int j; + printf("- Groups:\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); + } + } + return 0; +} diff --git a/src/lib/jsmn/example/simple.c b/src/lib/jsmn/example/simple.c index a6f8e6a9..ca2902b5 100644 --- a/src/lib/jsmn/example/simple.c +++ b/src/lib/jsmn/example/simple.c @@ -1,6 +1,6 @@ #include #include -#include "../jsmn.h" +#include "../jsmn.c" /* * A small example of jsmn parsing when JSON structure is known and number of