From 0b602f523e2a759848b67c8177ff8070feb39ec1 Mon Sep 17 00:00:00 2001 From: Charles Lohr Date: Sat, 10 Dec 2016 21:26:16 -0500 Subject: Update redist with an example config, and jsmn. --- redist/jsmntest.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 redist/jsmntest.c (limited to 'redist/jsmntest.c') diff --git a/redist/jsmntest.c b/redist/jsmntest.c new file mode 100644 index 0000000..715bd1f --- /dev/null +++ b/redist/jsmntest.c @@ -0,0 +1,75 @@ +#include "jsmn.h" +#include +#include +#include + +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; + FILE * f = fopen( "test.config", "r" ); + fseek( f, 0, SEEK_END ); + int len = ftell( f ); + fseek( f, 0, SEEK_SET ); + char * JSON_STRING = malloc( len ); + fread( JSON_STRING, len, 1, f ); + fclose( f ); + + jsmn_parser p; + jsmntok_t t[4096]; + jsmn_init(&p); + int r = jsmn_parse(&p, JSON_STRING, len, t, sizeof(t)/sizeof(t[0])); + if (r < 0) { + printf("Failed to parse JSON: %d\n", r); + return 1; + } + 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], "acc_bias") == 0) { + /* We may use strndup() to fetch string value */ +// printf("ACC_BIAS: %.*s\n", t[i+1].end-t[i+1].start, JSON_STRING + t[i+1].start); +// } + if (jsoneq(JSON_STRING, &t[i], "modelPoints") == 0) { + int k; + jsmntok_t * tk = &t[i+1]; + printf( "%d / %d / %d / %d\n", tk->type, tk->start, tk->end, tk->size ); + int pts = tk->size; + for( k = 0; k < pts; k++ ) + { + tk = &t[i+2+k*4]; + printf( "++%d / %d / %d / %d\n", tk->type, tk->start, tk->end, tk->size ); + + float vals[3]; + int m; + for( m = 0; m < 3; m++ ) + { + tk++; + if( tk->type != 4 ) + { + fprintf( stderr, "Parse error.\n" ); + break; + } + printf( "%d\n", tk->type ); + } + } + /* We may additionally check if the value is either "true" or "false" */ +// printf("- CMap: %.*s\n", t[i+1].end-t[i+1].start, +// JSON_STRING + t[i+1].start); + } + } + return EXIT_SUCCESS; + + +} -- cgit v1.2.3