]> src.twobees.de Git - dotfiles.git/blob - stow/oh-my-zsh/.oh-my-zsh/plugins/jsontools/jsontools.plugin.zsh
...
[dotfiles.git] / stow / oh-my-zsh / .oh-my-zsh / plugins / jsontools / jsontools.plugin.zsh
1 # JSON Tools
2 # Adds command line aliases useful for dealing with JSON
3
4 # Check that user-defined method is installed
5 if [[ -n "$JSONTOOLS_METHOD" ]]; then
6   (( $+commands[$JSONTOOLS_METHOD] )) || unset JSONTOOLS_METHOD
7 fi
8
9 # If method undefined, find the first one that is installed
10 if [[ -z "$JSONTOOLS_METHOD" ]]; then
11   for JSONTOOLS_METHOD in node python3 ruby; do
12     # If method found, break out of loop
13     (( $+commands[$JSONTOOLS_METHOD] )) && break
14     # Otherwise unset the variable
15     unset JSONTOOLS_METHOD
16   done
17
18   # If no methods were found, exit the plugin
19   [[ -n "$JSONTOOLS_METHOD" ]] || return 1
20 fi
21
22 # Define json tools for each method
23 case "$JSONTOOLS_METHOD" in
24   node)
25     # node doesn't make it easy to deal with stdin, so we pass it as an argument with xargs -0
26     function pp_json() {
27       xargs -0 node -e 'console.log(JSON.stringify(JSON.parse(process.argv[1]), null, 4));'
28     }
29     function is_json() {
30       xargs -0 node -e '
31         try {
32           json = JSON.parse(process.argv[1]);
33           console.log("true");
34           process.exit(0);
35         } catch (e) {
36           console.log("false");
37           process.exit(1);
38         }
39       '
40     }
41     function urlencode_json() {
42       xargs -0 node -e "console.log(encodeURIComponent(process.argv[1]))"
43     }
44     function urldecode_json() {
45       xargs -0 node -e "console.log(decodeURIComponent(process.argv[1]))"
46     }
47   ;;
48   python3)
49     function pp_json() {
50       python3 -c 'import sys; del sys.path[0]; import runpy; runpy._run_module_as_main("json.tool")'
51     }
52     function is_json() {
53       python3 -c '
54 import sys; del sys.path[0];
55 import json
56 try:
57   json.loads(sys.stdin.read())
58   print("true"); sys.exit(0)
59 except ValueError:
60   print("false"); sys.exit(1)
61       '
62     }
63     function urlencode_json() {
64       python3 -c '
65 import sys; del sys.path[0];
66 from urllib.parse import quote_plus
67 print(quote_plus(sys.stdin.read()))
68       '
69     }
70     function urldecode_json() {
71       python3 -c '
72 import sys; del sys.path[0];
73 from urllib.parse import unquote_plus
74 print(unquote_plus(sys.stdin.read()))
75       '
76     }
77   ;;
78   ruby)
79     function pp_json() {
80       ruby -e '
81         require "json"
82         require "yaml"
83         puts JSON.parse(STDIN.read).to_yaml
84       '
85     }
86     function is_json() {
87       ruby -e '
88         require "json"
89         begin
90           puts !!JSON.parse(STDIN.read); exit(0)
91         rescue JSON::ParserError
92           puts false; exit(1)
93         end
94       '
95     }
96     function urlencode_json() {
97       ruby -e 'require "cgi"; puts CGI.escape(STDIN.read)'
98     }
99     function urldecode_json() {
100       ruby -e 'require "cgi"; puts CGI.unescape(STDIN.read)'
101     }
102   ;;
103 esac
104 unset JSONTOOLS_METHOD
105
106 ## Add NDJSON support
107
108 function {pp,is,urlencode,urldecode}_ndjson() {
109   local json jsonfunc="${0//ndjson/json}"
110   while read -r json; do
111     $jsonfunc <<< "$json"
112   done
113 }