X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=util%2Fjson-parse.c;fp=util%2Fjson-parse.c;h=db3e47314dbc6c258e45dc3f720c989ed535cd0c;hp=0000000000000000000000000000000000000000;hb=a6d42174fde823c89a661c17be2165bce0d94870;hpb=76d513fc3b7e7e267875fd965023dda71a635e1d diff --git a/util/json-parse.c b/util/json-parse.c new file mode 100644 index 0000000..db3e473 --- /dev/null +++ b/util/json-parse.c @@ -0,0 +1,77 @@ +/* This file is part of the YAZ toolkit. + * Copyright (C) 1995-2010 Index Data + * See the file LICENSE for details. + */ + +#include +#include +#include + +#include +#include +#include + +void usage(const char *prog) +{ + fprintf(stderr, "%s: [-p]\n", prog); + exit(1); +} + +static struct json_node *do_parse_from_stdin(void) +{ + FILE *f = stdin; + WRBUF w = wrbuf_alloc(); + struct json_node *n; + const char *json_str; + const char *err_msg; + int c; + + while ((c = getc(f)) != EOF) + wrbuf_putc(w, c); + json_str = wrbuf_cstr(w); + n = json_parse(json_str, &err_msg); + if (!n) + fprintf(stderr, "JSON parse error: %s\n", err_msg); + wrbuf_destroy(w); + return n; +} + +int main(int argc, char **argv) +{ + struct json_node *n; + int print = 0; + int ret; + char *arg; + while ((ret = options("p", argv, argc, &arg)) != YAZ_OPTIONS_EOF) + { + switch (ret) + { + case 'p': + print = 1; + break; + default: + usage(argv[0]); + } + } + n = do_parse_from_stdin(); + if (!n) + exit(1); + if (print) + { + WRBUF result = wrbuf_alloc(); + json_write_wrbuf(n, result); + puts(wrbuf_cstr(result)); + wrbuf_destroy(result); + } + json_remove_node(n); + return 0; +} +/* + * Local variables: + * c-basic-offset: 4 + * c-file-style: "Stroustrup" + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +