Browse Source

feat(jsontools): add tools to pretty print json-lines (ndjson) (#10176)

Co-authored-by: Marc Cornellà <hello@mcornella.com>
Eduardo Flores 2 years ago
parent
commit
7ded6752fd
2 changed files with 48 additions and 9 deletions
  1. 39 8
      plugins/jsontools/README.md
  2. 9 1
      plugins/jsontools/jsontools.plugin.zsh

+ 39 - 8
plugins/jsontools/README.md

@@ -17,32 +17,63 @@ Usage is simple... just take your json data and pipe it into the appropriate jso
 - `urlencode_json`: returns a url encoded string for the given json.
 - `urldecode_json`: returns decoded json for the given url encoded string.
 
+### Supports NDJSON (Newline Delimited JSON)
+
+The plugin also supports [NDJSON](http://ndjson.org/) input, which means all functions
+have an alternative function that reads and processes the input line by line. These
+functions have the same name except using `ndjson` instead of `json`:
+
+> `pp_ndjson`, `is_ndjson`, `urlencode_ndjson`, `urldecode_ndjson`.
+
 ### Examples
 
 - **pp_json**:
 
-```sh
+```console
 # curl json data and pretty print the results
 curl https://coderwall.com/bobwilliams.json | pp_json
 ```
 
 - **is_json**:
 
-```sh
-# Validate if file's content conforms to a valid JSON schema
-less data.json | is_json
+```console
+# validate if file's content conforms to a valid JSON schema
+$ is_json < data.json
+true
+# shows true / false and returns the proper exit code
+$ echo $?
+0
 ```
 
 - **urlencode_json**:
 
-```sh
+```console
 # json data directly from the command line
-echo '{"b":2, "a":1}' | urlencode_json
+$ echo '{"b":2, "a":1}' | urlencode_json
+%7B%22b%22:2,%20%22a%22:1%7D
 ```
 
 - **urldecode_json**:
 
-```sh
+```console
 # url encoded string to decode
-echo '%7B%22b%22:2,%20%22a%22:1%7D%0A' | urldecode_json
+$ echo '%7B%22b%22:2,%20%22a%22:1%7D' | urldecode_json
+{"b":2, "a":1}
+```
+
+- **pp_ndjson**:
+
+```console
+# echo two separate json objects and pretty print both
+$ echo '{"a": "b"}\n{"c": [1,2,3]}' | pp_ndjson
+{
+    "a": "b"
+}
+{
+    "c": [
+        1,
+        2,
+        3
+    ]
+}
 ```

+ 9 - 1
plugins/jsontools/jsontools.plugin.zsh

@@ -101,5 +101,13 @@ print(unquote_plus(sys.stdin.read()))
     }
   ;;
 esac
-
 unset JSONTOOLS_METHOD
+
+## Add NDJSON support
+
+function {pp,is,urlencode,urldecode}_ndjson() {
+  local json jsonfunc="${0//ndjson/json}"
+  while read -r json; do
+    $jsonfunc <<< "$json"
+  done
+}