1
votes

I am working on to push down the top level field into each element of the array inside it.

  1. I want to push 'country' into the each element of 'state' array
  2. I want to push 'stateName' into the each element of 'cities' array

Input JSON :

{
    "country": "usa",
    "state": [
        {
            "stateName": "TX",
            "location": "south",
            "cities": [
                {
                    "name": "Austin",
                    "pop": "1M"
                },
                {
                    "name": "Dallas",
                    "pop": "2M"
                }
            ]
        },
        {
            "stateName": "CA",
            "location": "west",
            "cities": [
                {
                    "name": "SanFran",
                    "pop": "3M"
                },
                {
                    "name": "LosAngeles",
                    "pop": "4M"
                }
            ]
        }
    ]
}

Expected Output JSON:

{
    "state": [
        {
            "country": "usa",      // pushed down country field into state array
            "stateName": "TX",
            "location": "south",
            "cities": [
                {
                    "stateName": "TX",   // pushed down stateName field into cities array
                    "name": "Austin",
                    "pop": "1M"
                },
                {
                    "stateName": "TX",
                    "name": "Dallas",
                    "pop": "2M"
                }
            ]
        },
        {
            "country": "usa",
            "stateName": "CA",
            "location": "west",
            "cities": [
                {
                    "stateName": "CA",
                    "name": "SanFran",
                    "pop": "3M"
                },
                {
                    "stateName": "CA",
                    "name": "LosAngeles",
                    "pop": "4M"
                }
            ]
        }
    ]
}
1

1 Answers

3
votes

Spec

[
  {
    "operation": "shift",
    "spec": {
      "state": {
        "*": { // state array index
          "stateName": "state[&1].stateName",
          "location": "state[&1].location",
          // got up the tree 3 level 0,1,2 
          //  and grab the value of "country" from
          //  that top level, and write it out to
          //  state[&1].country
          "@(2,country)": "state[&1].country",
          "cities": {
            "*": { // city array index
              "name": "state[&3].cities[&1].name",
              "pop": "state[&3].cities[&1].pop",
              "@(2,stateName)": "state[&3].cities[&1].stateName"
            }
          }
        }
      }
    }
  }
]