Преобразование JOLT для JSON изначально из формата Protobuf

У меня json преобразован из протокола protobuf в следующий формат:

{
  "id": "6aa0734f-6d6a-4b95-8a2b-2dde346f9df7",
  "measurements": [
    {
      "ts": "1590331111510000000",
      "values": [
        {},
        {
          "name": 1,
          "value": -1.8093990087509155
        },
        {
          "name": 2,
          "value": 0.35456427931785583
        }
      ],
      "parameters": [
        "Stat",
        "VoltageAnglePhaseB"
      ]
    }
  ]
}

ожидаемый результат:

    {
      "id" : "6aa0734f-6d6a-4b95-8a2b-2dde346f9df7",
      "ts" : "1590331111510000000",
      "Stat":-1.8093990087509155,
      "VoltageAnglePhaseB":0.35456427931785583
    }


Я начал свою спецификацию Jolt так:

    [
  {
    "operation": "shift",
    "spec": {
      "id": "id",
      "measurements": {
        "*": {
          "ts": "ts",
          "parameters": {
            "*": ""
          },
          "*": ""
        }
      }
    }
    }


    ]

Но столкнулся с проблемой извлечения имени и значения из JSON.

Есть у кого-нибудь идеи?


person Kirill Demidov    schedule 24.05.2020    source источник


Ответы (1)


Это можно сделать за 2 смены. Сначала переместите значения в valuesArr, точно так же сдвиньте параметры в parametersArr. Затем сопоставьте значения с индексом.

[
  {
    "operation": "shift",
    "spec": {
      "id": "id",
      "measurements": {
        "*": {
          "ts": "ts",
          "values": {
            "*": {
              "value": "valuesArr"
            }
          },
          "parameters": "parametersArr"
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "id": "id",
      "ts": "ts",
      "valuesArr": {
        "*": "@(2,parametersArr[&])"
      }
    }
  }
]
person Jagadesh    schedule 03.06.2020