Interesting point. Using (optional) separate array can also address the problem of "types" - knowing which values are quoted, and which one are not. This can also provide enough metadata to convert modified associative table back to JSON.
On Sun, Aug 28, 2022 at 9:51 AM Alex fxmbsw7 Ratchev <fxmb...@gmail.com> wrote: > > > On Sun, Aug 28, 2022, 15:46 Yair Lenga <yair.le...@gmail.com> wrote: > >> Sorry for not being clear. I'm looking for feedback. The solution that I >> have is using python to read the JSON, and generate the commands to build >> the associative array. Will have to rewrite in "C"/submit if there is >> positive feedback from others readers. Yair. >> > > ah, cool > i just have a suggestion, .. to store the keys in a separate array, space > safe > > On Sun, Aug 28, 2022 at 9:42 AM Alex fxmbsw7 Ratchev <fxmb...@gmail.com> >> wrote: >> >>> >>> >>> On Sun, Aug 28, 2022, 15:25 Yair Lenga <yair.le...@gmail.com> wrote: >>> >>>> Hi, >>>> >>>> Over the last few years, JSON data becomes a integral part of >>>> processing. >>>> In many cases, I find myself having to automate tasks that require >>>> inspection of JSON response, and in few cases, construction of JSON. So >>>> far, I've taken one of two approaches: >>>> * For simple parsing, using 'jq' to extract elements of the JSON >>>> * For more complex tasks, switching to python or Javascript. >>>> >>>> Wanted to get feedback about the following "extensions" to bash that >>>> will >>>> make it easier to work with simple JSON object. To emphasize, the goal >>>> is >>>> NOT to "compete" with Python/Javascript (and other full scale language) >>>> - >>>> just to make it easier to build bash scripts that cover the very common >>>> use >>>> case of submitting REST requests with curl (checking results, etc), and >>>> to >>>> perform simple processing of JSON files. >>>> >>>> Proposal: >>>> * Minimal - Lightweight "json parser" that will convert JSON files to >>>> bash >>>> associative array (see below) >>>> * Convert bash associative array to JSON >>>> >>>> To the extent possible, prefer to borrow from jsonpath syntax. >>>> >>>> Parsing JSON into an associative array. >>>> >>>> Consider the following, showing all possible JSON values (boolean, >>>> number, >>>> string, object and array). >>>> { >>>> "b": false, >>>> "n": 10.2, >>>> "s: "foobar", >>>> x: null, >>>> "o" : { "n": 10.2, "s: "xyz" }, >>>> "a": [ >>>> { "n": 10.2, "s: "abc", x: false }, >>>> { "n": 10.2, "s": "def" x: true}, >>>> ], >>>> } >>>> >>>> This should be converted into the following array: >>>> >>>> ------------------------------------- >>>> >>>> # Top level >>>> [_length] = 6 # Number of keys in >>>> object/array >>>> [_keys] = b n s x o a # Direct keys >>>> [b] = false >>>> [n] = 10.2 >>>> [s] = foobar >>>> [x] = null >>>> >>>> # This is object 'o' >>>> [o._length] = 2 >>>> [o._keys] = n s >>>> [o.n] = 10.2 >>>> [o.s] = xyz >>>> >>>> # Array 'a' >>>> [a._count] = 2 # Number of elements in array >>>> >>>> # Element a[0] (object) >>>> [a.0._length] = 3 >>>> [a.0._keys] = n s x >>>> [a.0.n] = 10.2 >>>> [a.0.s] = abc >>>> [a.0_x] = false >>>> >>>> ------------------------------------- >>>> >>>> I hope that example above is sufficient. There are few other items that >>>> are >>>> worth exploring - e.g., how to store the type (specifically, separate >>>> the >>>> quoted strings vs value so that "5.2" is different than 5.2, and "null" >>>> is >>>> different from null. >>>> >>> >>> did you forget to send the script along ? or am i completly loss >>> >>> a small thing i saw, a flat _keys doesnt do the job.. >>> >>> I will leave the second part to a different post, once I have some >>>> feedback. I have some prototype that i've written in python - POC - that >>>> make it possible to write things like >>>> >>>> declare -a foo >>>> curl http://www.api.com/weather/US/10013 | readjson foo >>>> >>>> printf "temperature(F) : %.1f Wind(MPH)=%d" ${foo[temp_f]}, ${foo[wind]} >>>> >>>> Yair >>>> >>>