user3660922
user3660922

Reputation: 1

Need JOLT spec file for transfer of complex JSON

I have a complex JSON object (I've simplified it for this example) that I cannot figure out the JOLT transform JSON for. Does anybody have any ideas of what the JOLT spec file should be?

Original JSON

[
  {
    "date": {
      "isoDate": "2019-03-22"
    },
    "application": {
      "name": "SiebelProject"
    },
    "applicationResults": [
      {
        "reference": {
          "name": "Number of Code Lines"
        },
        "result": {
          "value": 44501
        }
      },
      {
        "reference": {
          "name": "Transferability"
        },
        "result": {
          "grade": 3.1889542208002064
        }
      }
    ]
  },
  {
    "date": {
      "isoDate": "2019-03-21"
    },
    "application": {
      "name": "SiebelProject"
    },
    "applicationResults": [
      {
        "reference": {
          "name": "Number of Code Lines"
        },
        "result": {
          "value": 45000
        }
      },
      {
        "reference": {
          "name": "Transferability"
        },
        "result": {
          "grade": 3.8
        }
      }
    ]
  }
]

Desired JSON after transformation and sorting by "Name" ASC, "Date" DESC

[
  {
    "Name": "SiebelProject",
    "Date": "2019-03-22",
    "Number of Code Lines": 44501,
    "Transferability" : 3.1889542208002064
  },
  {
    "Name": "SiebelProject",
    "Date": "2019-03-21",
    "Number of Code Lines": 45000,
    "Transferability" : 3.8
  }
]

Upvotes: 0

Views: 288

Answers (1)

mattyb
mattyb

Reputation: 12103

I couldn't find a way to do the sort (I'm not even sure you can sort descending in JOLT) but here's a spec to do the transform:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "date": {
          "isoDate": "[#3].Date"
        },
        "application": {
          "name": "[#3].Name"
        },
        "applicationResults": {
          "*": {
            "reference": {
              "name": {
                "Number of Code Lines": {
                  "@(3,result.value)": "[#7].Number of Code Lines"
                },
                "Transferability": {
                  "@(3,result.grade)": "[#7].Transferability"
                }
              }
            }
          }
        }
      }
    }
  }
]

After that there are some tools (like jq I think) that could do the sort.

Upvotes: 0

Related Questions