Streaming means that outputs are produced as soon as possible. With the
`foreach` syntax one can write programs which reduce portions of the
streaming parse of a large input (reduce into proper JSON values, for
example), and discard the rest, processing incrementally.
This:
$ jq -c --stream .
should produce the same output as this:
$ jq -c '. as $dot | path(..) as $p | $dot | getpath($p) | [$p,.]'
The output of `jq --stream .` should be a sequence of`[[<path>],<leaf>]`
and `[[<path>]]` values. The latter indicate that the array/object at
that path ended.
Scalars and empty arrays and objects are leaf values for this purpose.
For example, a truncated input produces a path as soon as possible, then
later the error:
$ printf '[0,\n'|./jq -c --stream .
[[0],0]
parse error: Unfinished JSON term at EOF at line 3, column 0
$
37 lines
1.1 KiB
C
37 lines
1.1 KiB
C
#ifndef _JQ_H_
|
|
#define _JQ_H_
|
|
|
|
#include <stdio.h>
|
|
#include <jv.h>
|
|
|
|
enum {JQ_DEBUG_TRACE = 1};
|
|
|
|
typedef struct jq_state jq_state;
|
|
typedef void (*jq_err_cb)(void *, jv);
|
|
|
|
jq_state *jq_init(void);
|
|
void jq_set_error_cb(jq_state *, jq_err_cb, void *);
|
|
void jq_get_error_cb(jq_state *, jq_err_cb *, void **);
|
|
void jq_set_nomem_handler(jq_state *, void (*)(void *), void *);
|
|
jv jq_format_error(jv msg);
|
|
void jq_report_error(jq_state *, jv);
|
|
int jq_compile(jq_state *, const char*);
|
|
int jq_compile_args(jq_state *, const char*, jv);
|
|
void jq_dump_disassembly(jq_state *, int);
|
|
void jq_start(jq_state *, jv value, int);
|
|
jv jq_next(jq_state *);
|
|
void jq_teardown(jq_state **);
|
|
|
|
typedef jv (*jq_input_cb)(jq_state *, void *);
|
|
void jq_set_input_cb(jq_state *, jq_input_cb, void *);
|
|
void jq_get_input_cb(jq_state *, jq_input_cb *, void **);
|
|
|
|
void jq_set_attrs(jq_state *, jv);
|
|
jv jq_get_attrs(jq_state *);
|
|
jv jq_get_jq_origin(jq_state *);
|
|
jv jq_get_prog_origin(jq_state *);
|
|
jv jq_get_lib_dirs(jq_state *);
|
|
void jq_set_attr(jq_state *, jv, jv);
|
|
jv jq_get_attr(jq_state *, jv);
|
|
#endif /* !_JQ_H_ */
|