From dffbc09baf71b294185a36048166d00066d433b5 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Mon, 4 Aug 2014 19:26:18 +0200 Subject: [PATCH] jshn: pretty print indented output with jshn -i -w Signed-off-by: John Crispin --- CMakeLists.txt | 2 +- jshn.c | 27 +++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 681f8b1..f24fee9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,7 +51,7 @@ IF(EXISTS ${json}) TARGET_LINK_LIBRARIES(blobmsg_json ubox ${json}) ADD_EXECUTABLE(jshn jshn.c) - TARGET_LINK_LIBRARIES(jshn ${json}) + TARGET_LINK_LIBRARIES(jshn blobmsg_json ${json}) ADD_LIBRARY(json_script SHARED json_script.c) TARGET_LINK_LIBRARIES(json_script ubox) diff --git a/jshn.c b/jshn.c index f71e6e6..cec48a0 100644 --- a/jshn.c +++ b/jshn.c @@ -27,8 +27,13 @@ #include #include "list.h" +#include "blob.h" +#include "blobmsg_json.h" + #define MAX_VARLEN 256 +static struct blob_buf b = { 0 }; + static const char *var_prefix = ""; static int var_prefix_len = 0; @@ -249,30 +254,37 @@ out: return obj; } -static int jshn_format(bool no_newline) +static int jshn_format(bool no_newline, bool indent) { json_object *obj; + const char *output; obj = json_object_new_object(); jshn_add_objects(obj, "JSON_VAR", false); - fprintf(stdout, "%s%s", json_object_to_json_string(obj), - no_newline ? "" : "\n"); + output = json_object_to_json_string(obj); + if (indent) { + blob_buf_init(&b, 0); + blobmsg_add_json_from_string(&b, output); + output = blobmsg_format_json_indent(b.head, 1, 0); + } + fprintf(stdout, "%s%s", output, no_newline ? "" : "\n"); json_object_put(obj); return 0; } static int usage(const char *progname) { - fprintf(stderr, "Usage: %s [-n] -r |-w\n", progname); + fprintf(stderr, "Usage: %s [-n] [-i] -r |-w\n", progname); return 2; } int main(int argc, char **argv) { bool no_newline = false; + bool indent = false; int ch; - while ((ch = getopt(argc, argv, "p:nr:w")) != -1) { + while ((ch = getopt(argc, argv, "p:nir:w")) != -1) { switch(ch) { case 'p': var_prefix = optarg; @@ -281,10 +293,13 @@ int main(int argc, char **argv) case 'r': return jshn_parse(optarg); case 'w': - return jshn_format(no_newline); + return jshn_format(no_newline, indent); case 'n': no_newline = true; break; + case 'i': + indent = true; + break; default: return usage(argv[0]); } -- 2.25.1