0

I am trying to do a number of shifts to copy some data into multiple arrays and I am having trouble getting the data to correct array.

This is what I have

{
  "input": {
    "rating_date": "2018-08-06",
    "Rates": {
      "name": "Generic ratings Card",
      "version": "v1",
      "value": "2600.00",
      "name1": [
        {
          "hits": "321",
          "genre": "fiction",
          "ratingName": "name1"
        },
        {
          "hits": "654",
          "genre": "fiction",
          "ratingName": "name1"
        }
      ],
      "name2": [
        {
          "hits": "123",
          "genre": "nonfiction",
          "ratingName": "name2"
        },
        {
          "hits": "456",
          "genre": "fiction",
          "ratingName": "name2"
        }
      ]
    }
  },
  "spec": {
    "operation": "shift",
    "spec": {
      "rating_date": "rating_by_date[#0].date",
      "Rates": {
        "name*": {
          "$": "rating_by_date[#2].ratecards[#1].type",
          "*": {
            "@": "rating_by_date[#3].ratecards[#2].rates[#0].&"
          }
        }
      }
    }
  },
  "expected": {
    "rating_by_date": [
      {
        "date": "2018-08-06",
        "ratecards": [
          {
            "type": "name1",
            "rates": [
              {
                "hits": "321",
                "genre": "fiction",
                "ratingName": "name1"
              },
              {
                "hits": "654",
                "genre": "fiction",
                "ratingName": "name1"
              }
            ]
          },
          {
            "type": "name2",
            "rates": [
              {
                "hits": "123",
                "genre": "nonfiction",
                "ratingName": "name2"
              },
              {
                "hits": "456",
                "genre": "fiction",
                "ratingName": "name2"
              }
            ]
          }
        ]
      }
    ]
  }
}

The idea is to take the objects in the rates array and transform them (in a later shift) into Key-Value pairs, which I already know how to do.

Now, the spec I have is not shifting the data into appropriate arrays and I end up with something like this:

{
  "rating_by_date" : [ {
    "date" : "2018-08-06",
    "ratecards" : [ {
      "type" : "name1",
      "rates" : [ {
        "0" : {
          "hits" : "321",
          "genre" : "fiction",
          "ratingName" : "name1"
        }
      } ]
    }, {
      "rates" : [ {
        "1" : {
          "hits" : "654",
          "genre" : "fiction",
          "ratingName" : "name1"
        }
      } ]
    } ]
  }, {
    "ratecards" : [ {
      "type" : "name2",
      "rates" : [ {
        "0" : {
          "hits" : "123",
          "genre" : "nonfiction",
          "ratingName" : "name2"
        }
      } ]
    }, {
      "rates" : [ {
        "1" : {
          "hits" : "456",
          "genre" : "fiction",
          "ratingName" : "name2"
        }
      } ]
    } ]
  } ]
}

Instead of creating new objects in the same array, it is creating new arrays altogether. I am clearly not understanding exactly how to reference array structures on the RHS, I'd appreciate a clarification.

davdic
  • 249
  • 3
  • 10

1 Answers1

0

I managed to get it to work, but I'm not sure why it would not work in one shift step. Here is what I had to do to make it work:

[
  {
    "operation": "shift",
    "spec": {
      "rating_date": "rating_by_date[0].date",
      "Rates": {
        "name*": {
          "$": "rating_by_date[0].ratecards.&.type",
          "@": "rating_by_date[0].ratecards.&.rates"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "rating_by_date": {
        "*": {
          "ratecards": {
            "*": {
              "@": "rating_by_date[&3].ratecards2[]"
            }
          },
          "*": "rating_by_date[&1].&"
        }
      }
    }
  }
]
davdic
  • 249
  • 3
  • 10