使用JOLT将顶级字段下推到数组的每个元素中

时间:2016-09-20 01:08:04

标签: arrays json jolt

我正在努力将顶级字段压入其中的数组的每个元素。

  1. 我想将'country'推入'state'数组的每个元素
  2. 我想将'stateName'推送到'cities'数组
  3. 的每个元素中

    输入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"
                    }
                ]
            }
        ]
    }
    

    预期输出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 个答案:

答案 0 :(得分:2)

规格

[
  {
    "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"
            }
          }
        }
      }
    }
  }
]