Как объединить два массива с помощью преобразования JOLT

#json #jolt

Вопрос:

я не очень хорошо знаком с трансформацией толчка и ищу помощи.

Входной JSON выглядит следующим образом:

 {
  "2021-03-01": {
    "hours": 0
  },
  "2021-03-02": {
    "hours": 0
  },
  "2021-03-03": {
    "hours": 6.31
  },
  "2021-03-04": {
    "hours": 6.49
  },
  "2021-03-05": {
    "hours": 0
  }
}
 

Необходимые выходные данные заключаются в следующем:

 [
  {
    "day": "2021-03-01",
    "hours": 0
  },
  {
    "day": "2021-03-02",
    "hours": 0
  },
  {
    "day": "2021-03-03",
    "hours": 6.31
  },
  {
    "day": "2021-03-04",
    "hours": 6.49
  },
  {
    "day": "2021-03-05",
    "hours": 0
  }
]
 

Любая помощь будет признательна.
Спасибо

Ответ №1:

 [
  {
    "operation": "shift",
    "spec": {
      "*": {
        "hours": "obj.hours",
        "$": "obj.day"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "day": {
          "*": "[amp;].day"
        },
        "hours": {
          "*": "[amp;].hours"
        }
      }
    }
  }
]
 

Комментарии:

1. понял ваш подход, Барбарос, ваш подход-более оптимизированное и чистое решение, чем мое.

Ответ №2:

Другим подходом может быть

 [
  {
    "operation": "shift",
    "spec": {
      "*": {
        "$": "amp;.day",
        "*": "amp;1.amp;"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@": ""
      }
    }
  }
]
 

где несуществующий ключ( day ) определяется на первом шаге, а затем соответствующие ключи объектов удаляются на втором. Например, нет необходимости повторять имена ключей, скорее вы можете использовать символические замены.

или даже прямой вариант с одним преобразованием сдвига может быть задан как

 [
  {
    "operation": "shift",
    "spec": {
      "*": {
        "$": "[#2].day",
        "*": "[#2].amp;"
      }
    }
  }
]