--- libelwix/example/test_json.c 2017/11/28 11:45:05 1.1.2.5 +++ libelwix/example/test_json.c 2017/11/28 13:42:22 1.1.2.6 @@ -96,6 +96,46 @@ run_simple(json_t *json) return 0; } +static int +dump(const char *jstr, jtok_t *toks, int toksnum, int indent) +{ + register int i, j, k; + + if (!toksnum) + return 0; + + if (toks->tok_type == J_VALUE) { + printf("%.*s", (int) json_toklen(toks), json_tokstr(jstr, toks)); + return 1; + } else if (toks->tok_type == J_STRING) { + printf("%.*s", (int) json_toklen(toks), json_tokstr(jstr, toks)); + return 1; + } else if (toks->tok_type == J_OBJECT) { + printf("\n"); + for (j = i = 0; i < json_toksize(toks); i++) { + for (k = 0; k < indent; k++) + printf(" "); + j += dump(jstr, toks + j + 1, toksnum - j, indent + 1); + printf(": "); + j += dump(jstr, toks + j + 1, toksnum - j, indent + 1); + printf("\n"); + } + return j + 1; + } else if (toks->tok_type == J_ARRAY) { + printf("\n"); + for (j = i = 0; i < json_toksize(toks); i++) { + for (k = 0; k < indent - 1; k++) + printf(" "); + printf(" - "); + j += dump(jstr, toks + j + 1, toksnum - j, indent + 1); + printf("\n"); + } + return j + 1; + } + + return 0; +} + int run_dump(json_t *json) {