Skip to content

Commit c96e1db

Browse files
committed
Quick Save
1 parent f2a387a commit c96e1db

31 files changed

+365
-7
lines changed

cmds/jsonrange/jsonrange.go

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,22 +99,39 @@ would yield
9999
100100
3
101101
102-
Check for the index value of last element
102+
Check for the index of last element
103103
104104
echo '["one","two","three"]' | %s -last
105105
106106
would yield
107107
108108
2
109109
110+
Check for the index value of last element
111+
112+
echo '["one","two","three"]' | %s -values -last
113+
114+
would yield
115+
116+
"three"
117+
110118
Limitting the number of items returned
111119
112-
echo '[1,2,3,4,5]' | %s -limit 2
120+
echo '[10,20,30,40,50]' | %s -limit 2
113121
114122
would yield
115123
116124
1
117125
2
126+
127+
Limitting the number of values returned
128+
129+
echo '[10,20,30,40,50]' | %s -values -limit 2
130+
131+
would yield
132+
133+
10
134+
20
118135
`
119136

120137
// Standard Options
@@ -334,13 +351,20 @@ func main() {
334351
case showLast:
335352
l, err := getLength(data)
336353
cli.ExitOnError(app.Eout, err, quiet)
337-
fmt.Fprintf(app.Out, "%d", l-1)
354+
if showValues {
355+
elems, err := srcVals(data, limit)
356+
cli.ExitOnError(app.Eout, err, quiet)
357+
l := len(elems)
358+
fmt.Fprintf(app.Out, "%s", elems[l-1])
359+
} else {
360+
fmt.Fprintf(app.Out, "%d", l-1)
361+
}
338362
case showValues:
339-
elems, err := srcVals(data, limit-1)
363+
elems, err := srcVals(data, limit)
340364
cli.ExitOnError(app.Eout, err, quiet)
341365
fmt.Fprintln(app.Out, strings.Join(elems, delimiter))
342366
default:
343-
elems, err := srcKeys(data, limit-1)
367+
elems, err := srcKeys(data, limit)
344368
cli.ExitOnError(app.Eout, err, quiet)
345369
fmt.Fprintln(app.Out, strings.Join(elems, delimiter))
346370
}

demos/jsonmunge/demo.bash

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/bin/bash
2+
3+
echo -n 'Generating person.json: '
4+
cat <<EOF > person.json
5+
{"name": "Doe, Jane", "email":"[email protected]", "age": 42}
6+
EOF
7+
cat person.json
8+
echo ''
9+
10+
echo -n 'Generating name.tmpl: '
11+
cat <<EOF > name.tmpl
12+
{{- printf "%q" .name -}}
13+
EOF
14+
cat name.tmpl
15+
echo ''
16+
17+
echo ' running: cat person.json | jsonmunge name.tmpl'
18+
cat person.json | jsonmunge name.tmpl > result1.json
19+
echo 'expected: "Doe, Jane"'
20+
echo -n ' got: '
21+
cat result1.json
22+
echo ''

demos/jsonmunge/index.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
# demo jsonmunge
3+
4+
If person.json contained
5+
6+
```json
7+
{"name": "Doe, Jane", "email":"[email protected]", "age": 42}
8+
```
9+
10+
and the template, name.tmpl, contained
11+
12+
```template
13+
{{- .name -}}
14+
```
15+
16+
Getting just the name could be done with
17+
18+
```shell
19+
cat person.json | jsonmunge name.tmpl
20+
```
21+
22+
This would yield
23+
24+
```
25+
"Doe, Jane"
26+
```
27+

demos/jsonmunge/name.tmpl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{{- printf "%q" .name -}}

demos/jsonmunge/person.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"name": "Doe, Jane", "email":"[email protected]", "age": 42}

demos/jsonmunge/result1.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
"Doe, Jane"

demos/jsonrange/array1.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
["one", 2, {"label":"three","value":3}]

demos/jsonrange/array2.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
["one","two","three"]

demos/jsonrange/array3.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[10,20,30,40,50]

demos/jsonrange/demo.bash

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
#!/bin/bash
2+
3+
echo "Generating person.json"
4+
cat <<EOF > person.json
5+
{"name": "Doe, Jane", "email":"[email protected]", "age": 42}
6+
EOF
7+
cat person.json
8+
echo ''
9+
10+
echo ' running: cat person.json | jsonrange -i -'
11+
cat person.json | jsonrange -i - > result1.txt
12+
cat <<EOF > expected1.txt
13+
name
14+
email
15+
age
16+
EOF
17+
echo -n 'expected: '
18+
cat expected1.txt
19+
echo -n ' got: '
20+
cat result1.txt
21+
echo ''
22+
23+
echo ' running: jsonrange -i person.json -values'
24+
jsonrange -i person.json -values | result2.txt
25+
cat <<EOF > expected2.txt
26+
"Doe, Jane"
27+
28+
42
29+
EOF
30+
echo -n 'expected: '
31+
cat expected2.txt
32+
echo -n ' got: '
33+
cat result2.txt
34+
echo ''
35+
36+
echo "Generating array1.json"
37+
cat <<EOF > array1.json
38+
["one", 2, {"label":"three","value":3}]
39+
EOF
40+
41+
echo ' running: jsonrange -i array1.json'
42+
jsonrange -i array1.json > result3.txt
43+
cat <<EOF > expected3.txt
44+
0
45+
1
46+
2
47+
EOF
48+
echo -n 'expected: '
49+
cat expected3.txt
50+
echo -n ' got: '
51+
cat result3.txt
52+
echo ''
53+
cmp expected3.txt result3.txt
54+
55+
echo 'jsonrange -i array1.json -values'
56+
jsonrange -i array1.json -values > result4.txt
57+
cat <<EOF > expected4.txt
58+
"one"
59+
2
60+
{"label":"three","value":3}
61+
EOF
62+
echo -n 'expected: '
63+
cat expected4.txt
64+
echo -n ' got: '
65+
cat result4.txt
66+
echo ''
67+
cmp expected4.txt result4.txt
68+
69+
echo 'Generating array2.json'
70+
echo '["one","two","three"]' > array2.json
71+
cat array2.json
72+
echo ''
73+
74+
echo ' running: jsonrange -i array2.json -length'
75+
jsonrange -i array2.json -length > result5.txt
76+
echo -n "3" > expected5.txt
77+
echo -n 'expected: '
78+
cat expected5.txt
79+
echo -n ' got: '
80+
cat result5.txt
81+
echo ''
82+
cmp expected5.txt result5.txt
83+
84+
echo ' running: jsonrange -i array2.json -last'
85+
jsonrange -i array2.json -last > result6.txt
86+
echo -n '2' > expected6.txt
87+
echo -n 'expected: '
88+
cat expected6.txt
89+
echo -n ' got: '
90+
cat result6.txt
91+
echo ''
92+
cmp expected6.txt result6.txt
93+
94+
echo ' running: jsonrange -i array2.json -values -last'
95+
jsonrange -i array2.json -values -last > result7.txt
96+
echo '"three"' > expected7.txt
97+
echo -n 'expected: '
98+
cat expected7.txt
99+
echo -n ' got: '
100+
cat result7.txt
101+
echo ''
102+
cmp expected7.txt result7.txt
103+
104+
echo 'Generating array3.json'
105+
echo '[10,20,30,40,50]' > array3.json
106+
echo ''
107+
108+
echo ' running: jsonrange -i array3.json -limit 2'
109+
jsonrange -i array3.json -limit 2 > result8.txt
110+
cat <<EOF > expected8.txt
111+
1
112+
2
113+
EOF
114+
echo -n 'expected: '
115+
cat expected8.txt
116+
echo -n ' got: '
117+
cat result8.txt
118+
echo ''
119+
cmp expected8.txt result8.txt
120+
121+
echo ' running: jsonrange -i array3.json -values -limit 2'
122+
jsonrange -i array3.json -values -limit 2 > result9.txt
123+
cat <<EOF > expected9.txt
124+
10
125+
20
126+
EOF
127+
echo -n 'expected: '
128+
cat expected9.txt
129+
echo -n ' got: '
130+
cat result9.txt
131+
echo ''
132+
cmp expected9.txt result9.txt
133+

0 commit comments

Comments
 (0)