-
Notifications
You must be signed in to change notification settings - Fork 0
/
json-vim
executable file
·77 lines (72 loc) · 1.9 KB
/
json-vim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!/bin/bash
# Copyright 2012 Kenneth Mitchner
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Script to allow human readable editing of redis data.
# By Ken Mitchner
function decode_file()
{
TAB=' '
FILE=$1
sed -i -e 's/\([{[]\)/\1\n/g;s/\([]}]\)/\n\1/g;s/,/,\n/g;' $FILE
depth=0
linenum=0
while read line
do
linenum=$(($linenum+1))
if [[ $line =~ []}] ]]
then
depth=$(($depth-1))
fi
tabs=$(for (( i=0; i < $depth; i++ )); do printf "%s" "$TAB"; done)
sed -i -e "${linenum}s/^/$tabs/g" $FILE
if [[ $line =~ [[{] ]]
then
depth=$(($depth+1))
fi
done < "$FILE"
}
function encode_file()
{
FILE=$1
sed -i -e 's/^[ \t]*//g;' $FILE
sed -i -e ':a;N;$!ba;s/\n//g' $FILE
isstr=0
len=$(cat $FILE | wc -m)
data=$(cat $FILE)
for (( i=0; i < $len; i++ ))
do
char=${data:$i:1}
if [ "$char" == '"' ] ; then
if [ $isstr -eq 1 ] ; then isstr=0 ; else isstr=1 ; fi
elif [ $isstr -eq 0 -a "$char" == " " ] ; then
data="${data:0:$i}${data:$(($i+1))}"
i=$(($i-1))
fi
done
echo -n "$data" >$FILE
}
if [ -a $1 ] ; then
FILE=$1
else
TMPFILE=$(mktemp /tmp/XXXXXXXXXX.json)
FILE=$TMPFILE
echo -n ${*:1} >$FILE
fi
decode_file $FILE
vim $FILE
encode_file $FILE
cat $FILE
if [ -n $TMPFILE ] ; then
rm $TMPFILE
fi