bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Light weight support for JSON


From: Yair Lenga
Subject: Re: Light weight support for JSON
Date: Sun, 28 Aug 2022 10:51:33 -0400

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 <fxmbsw7@gmail.com>
wrote:

>
>
> On Sun, Aug 28, 2022, 15:46 Yair Lenga <yair.lenga@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 <fxmbsw7@gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Sun, Aug 28, 2022, 15:25 Yair Lenga <yair.lenga@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
>>>>
>>>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]