Root/package/jshn/files/jshn.sh

1[ -z "$N" ] && . /etc/functions.sh
2
3# functions for parsing and generating json
4
5json_init() {
6    [ -n "$JSON_UNSET" ] && eval "unset $JSON_UNSET"
7    export -- JSON_SEQ=0 JSON_STACK= JSON_CUR="JSON_VAR" JSON_UNSET=
8}
9
10json_add_generic() {
11    local type="$1"
12    local var="$2"
13    local val="$3"
14    local cur="${4:-$JSON_CUR}"
15
16    export ${NO_EXPORT:+-n} -- "${cur}_$var=$val"
17    export ${NO_EXPORT:+-n} -- "TYPE_${cur}_$var=$type"
18    append JSON_UNSET "${cur}_$var TYPE_${cur}_$var"
19    append "KEYS_${cur}" "$var"
20}
21
22json_add_table() {
23    JSON_SEQ=$(($JSON_SEQ + 1))
24    append JSON_STACK "$JSON_CUR"
25    local table="JSON_TABLE$JSON_SEQ"
26    export ${NO_EXPORT:+-n} -- "UP_$table=$JSON_CUR"
27    JSON_CUR="$table"
28}
29
30json_add_object() {
31    local cur="$JSON_CUR"
32    json_add_table
33    json_add_generic object "$1" "$JSON_CUR" "$cur"
34}
35
36json_close_object() {
37    local oldstack="$JSON_STACK"
38    export "KEYS_${JSON_CUR}"
39    JSON_CUR="${JSON_STACK##* }"
40    JSON_STACK="${JSON_STACK% *}"
41    [[ "$oldstack" == "$JSON_STACK" ]] && JSON_STACK=
42}
43
44json_add_array() {
45    local cur="$JSON_CUR"
46    json_add_table
47    json_add_generic array "$1" "$JSON_CUR" "$cur"
48}
49
50json_close_array() {
51    json_close_object
52}
53
54json_add_string() {
55    json_add_generic string "$1" "$2"
56}
57
58json_add_int() {
59    json_add_generic int "$1" "$2"
60}
61
62json_add_boolean() {
63    json_add_generic boolean "$1" "$2"
64}
65
66# functions read access to json variables
67
68json_load() {
69    eval `jshn -r "$1"`
70}
71
72json_dump() {
73    jshn -w
74}
75
76json_get_type() {
77    local dest="$1"
78    local var="$2"
79    eval "export ${NO_EXPORT:+-n} -- \"$dest=\${TYPE_${JSON_CUR}_$var}\""
80}
81
82json_get_var() {
83    local dest="$1"
84    local var="$2"
85    eval "export ${NO_EXPORT:+-n} -- \"$dest=\${${JSON_CUR}_$var}\""
86}
87
88json_select() {
89    local target="$1"
90    local type
91
92    [ -z "$1" ] && {
93        JSON_CUR="JSON_VAR"
94        return
95    }
96    [[ "$1" == ".." ]] && {
97        eval "JSON_CUR=\"\${UP_$JSON_CUR}\""
98        return;
99    }
100    json_get_type type "$target"
101    case "$type" in
102        object|array)
103            json_get_var JSON_CUR "$target"
104        ;;
105        *)
106            echo "WARNING: Variable '$target' does not exist or is not an array/object"
107        ;;
108    esac
109}
110

Archive Download this file



interactive