From 000ad823e4bd9de07bcd5e5a33da8e8b0f91155f Mon Sep 17 00:00:00 2001 From: Kairui Song Date: Mon, 8 Apr 2024 01:47:06 +0800 Subject: [PATCH 1/2] Remove redundant indent --- poorjson.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/poorjson.sh b/poorjson.sh index a7438d1..986529c 100755 --- a/poorjson.sh +++ b/poorjson.sh @@ -22,8 +22,8 @@ _jarr() { while :; do _jread "$1" case $_TOK in "]") return;; - ",") [ "$1" -ge 0 ] 2>/dev/null && _TMP=$(($1 - 1)) && shift && set -- "$_TMP" "$@";; - *) _err;; + ",") [ "$1" -ge 0 ] 2>/dev/null && _TMP=$(($1 - 1)) && shift && set -- "$_TMP" "$@";; + *) _err;; esac if _is_match "$1" 0; then _jval "$@"; else _jval; fi || _err done @@ -49,9 +49,9 @@ _jval() { [ "$#" -eq 0 ] || [ "$*" = . ] || shift _jread "$1" case $_TOK in '{') _jobj "$@";; - "[") _jarr "$@";; - true|false|null|-*|[0-9]*|'"'*'"') [ "$1" = \* ] && echo "$_TOK"; :;; - *) ! :;; + "[") _jarr "$@";; + true|false|null|-*|[0-9]*|'"'*'"') [ "$1" = \* ] && echo "$_TOK"; :;; + *) ! :;; esac } From 6a6223ab3a1377667dbfb628c770bc973585d766 Mon Sep 17 00:00:00 2001 From: Kairui Song Date: Mon, 8 Apr 2024 01:51:32 +0800 Subject: [PATCH 2/2] Be lenient for string keys After this, we have: $ echo '{ "key1" : { "key2": {}, "key3": [null, true, false, "value"]}}' | ./poorjson.sh key1 key3 3 "value" Previously key1 key3 need to quoted. --- poorjson.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/poorjson.sh b/poorjson.sh index 986529c..43303f0 100755 --- a/poorjson.sh +++ b/poorjson.sh @@ -8,7 +8,7 @@ __JNUM='(-?([1-9][0-9]*|0)(\.[0-9]+)?([eE][-+]?[0-9]+)?)' __JSTR='("([^[:cntrl:]\\"]|\\(["\\\/bfnrt]|u[0-9a-fA-F]{4}))*")' _TOK="" _TMP="" __JTOK="$__JSTR|$__JNUM|true|false|null|[][}{,:]" -_is_match() { case $1 in "$2"|'*'|.);; *)! :;; esac } +_is_match() { case "$1" in "$2"|'*'|.);; *)! :;; esac || case "$2" in "\"$1\"");; *)! :;; esac } _err() { echo "Unexpected $1token: \"$_TOK\""; exit 1; } _jread() { read -r _TOK || _err "EOF after "