diff --git a/README.md b/README.md index d753820..f1fc162 100644 --- a/README.md +++ b/README.md @@ -59,4 +59,10 @@ Reading JSON streams with callbacks ----------------------------------- If you are outputting a new stream as you read instead of just looking for the -sub-objects that interest you, +sub-objects that interest you, you also need to know when arrays and hashes begin, +not just when they end, so you can output the opening bracket or brace. For this +purpose there is an additional streaming reader function, +json_read_separators(), which takes an additional argument for +a function to call when brackets, braces, commas, and colons are read. +Other object types and the closing of arrays and hashes are still sent through +the normal return value. diff --git a/jsoncat.c b/jsoncat.c index f3220e1..7f2272b 100644 --- a/jsoncat.c +++ b/jsoncat.c @@ -113,7 +113,7 @@ void process_callback(FILE *f, char *fname) { json_object *j; int level = 0; - while ((j = json_read_with_separators(jp, callback, &level)) != NULL) { + while ((j = json_read_separators(jp, callback, &level)) != NULL) { json_print_one(j, &level); json_free(j); diff --git a/jsonpull.c b/jsonpull.c index 8a62019..e2ac071 100644 --- a/jsonpull.c +++ b/jsonpull.c @@ -175,7 +175,7 @@ static void string_free(struct string *s) { free(s->buf); } -json_object *json_read_with_separators(json_pull *j, json_separator_callback cb, void *state) { +json_object *json_read_separators(json_pull *j, json_separator_callback cb, void *state) { int c; again: /////////////////////////// Whitespace @@ -476,7 +476,7 @@ again: } json_object *json_read(json_pull *j) { - return json_read_with_separators(j, NULL, NULL); + return json_read_separators(j, NULL, NULL); } json_object *json_read_tree(json_pull *p) { diff --git a/jsonpull.h b/jsonpull.h index da5232b..6e14d6a 100644 --- a/jsonpull.h +++ b/jsonpull.h @@ -44,7 +44,7 @@ typedef void (*json_separator_callback)(json_type type, json_pull *j, void *stat json_object *json_read_tree(json_pull *j); json_object *json_read(json_pull *j); -json_object *json_read_with_separators(json_pull *j, json_separator_callback cb, void *state); +json_object *json_read_separators(json_pull *j, json_separator_callback cb, void *state); void json_free(json_object *j); json_object *json_hash_get(json_object *o, char *s);