skip to Main Content

I have json object as follows

{"resources":[{"srno":"1","name":"name1","projects":[{"prjname":"abc"}]},{"srno":"1","name":"name1","projects":[{"prjname":"def"}]},{"srno":"2","name":"name2","projects":[{"prjname":"abc"}]},{"srno":"4","name":"name4","projects":[{"prjname":"prq"}]},{"srno":"4","name":"name4","projects":[{"prjname":"stu"}]},{"srno":"4","name":"name4","projects":[{"prjname":"uvw"}]},{"srno":"5","name":"name5"}]}

How can I get resources grouped by id,name – each of that should contain list of projects? basically,flattened to structured
i.e.

{"resources":[{"srno":"1","name":"name1","projects":[{"prjname":"abc"},{"prjname":"def"}]},{"srno":"2","name":"name2","projects":[{"prjname":"abc"}]},{"srno":"4","name":"name4","projects":[{"prjname":"prq"},{"prjname":"stu"},{"prjname":"uvw"}]},{"srno":"5","name":"name5"}]}

can someone share jsonata expression to create same

2

Answers


  1. Chosen as BEST ANSWER

    I could solve it adding solution with jsonata formula Demo @ https://try.jsonata.org/fjSXaUjQq

    1 : $distinct(                          /*select distinct item from */               
    2 :    $.resources.                     /*(     for each item in  resources */
    3 :    (                                /*  ( */
    4 :        $id :=  srno;                /*        set variable $id=item.srno */
    5 :        {                            /*         { return key-pair */
    6 :            "srno":srno,"name":name, /*            "srno"=item.srno,"name"=item.name, */
    7 :            "projects":%.resources   /*            "projects"= ( from item-parent.resources */
    8 :            [srno=$id]               /*            where resources.srno=$id ) */
    9 :            .projects                /*            return projects */
    10:         }                           /*        }  */
    11:    )                                /*    ) */
    12: )                                   /*)  */
    

  2. I would do it like this, using the built-in reduce operator to group, and the $each function to get the grouped values in array format:

    resources{
      srno & name: {
        "srno": [srno][0],
        "name": [name][0],
        "projects": projects
      }
    } ~> $each(function($value) { $value })
    

    Check it out on the Stedi playground: https://stedi.link/NygjzJv

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search