Нужна спецификация Jolt для преобразования входного json с динамическим полем в выходной json

Мне нужна спецификация толчка для входного json ниже с динамическим полем даты и массивом элементов. Эта спецификация тряски должна преобразовать этот входной json в выходной json.

Введите Json:

{
  "market": {
    "2024-04-13": [
      {
        "code": "ABC",
        "name": "Name1",
        "date": "2024-04-13T00:00:00.000Z",
        "rev": 100,
        "sold": 1
      }
    ],
    "2024-04-14": [
      {
        "code": "DEF",
        "name": "Name2",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 233.32,
        "sold": 3
      },
      {
        "code": "EFG",
        "name": "DISCOUNT",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 300.05,
        "sold": 1
      },
      {
        "code": "MNO",
        "name": "GROUP",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 45.33,
        "sold": 3
      }
    ],
    "2024-04-15": [
      {
        "code": "POR",
        "name": "TEST",
        "date": "2024-04-15T00:00:00.000Z",
        "rev": 100,
        "sold": 1
      }
    ]
  }
}

Вывод в формате JSON

{
  "market": {
    "DATE": [
      {
        "code": "ABC",
        "name": "Name1",
        "date": "2024-04-13T00:00:00.000Z",
        "rev": 100,
        "sold": 1
      },
      {
        "code": "DEF",
        "name": "Name2",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 233.32,
        "sold": 3
      },
      {
        "code": "EFG",
        "name": "DISCOUNT",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 300.05,
        "sold": 1
      },
      {
        "code": "MNO",
        "name": "GROUP",
        "date": "2024-04-14T00:00:00.000Z",
        "rev": 45.33,
        "sold": 3
      },
      {
        "code": "POR",
        "name": "TEST",
        "date": "2024-04-15T00:00:00.000Z",
        "rev": 100,
        "sold": 1
      }
    ]
  }
}

Приведенную ниже спецификацию Jolt я попробовал, но она не дает точного результата. Он группирует первые несколько элементов, но мне нужны они отдельно, как и выходные данные json.

Спецификация встряхивания

[
  {
    "operation": "shift",
    "spec": {
      "market": {
        "*": {
          "*": {
            "code": "market[&1].code",
            "name": "market[&1].name",
            "date": "market[&1].date",
            "rev": "market[&1].rev",
            "sold": "market[&1].sold"
          }
        }
      }
    }
  }
]
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам следует разделить эти даты в сочетании со значениями подиндексов (0,1,2), чтобы иметь возможность различать все подобъекты, такие как

[
  {
    "operation": "shift",
    "spec": {
      "*": { //lhe layer for the "market"
        "*": { //the layer for the arrays
          "*": { //the layer for the indexes of the arrays
            "*": "&3.&2_&1.&" // &3 : going 3 levels up to bring the literal "market"
                              // &2 : the date values
                              // &1 : the indexes of the arrays
                              // &  : the leaf node which represents the replication the respective value 
          }
        }
      }
    }
  },
  { //arrange the key names of the outermost objects
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2.DATE[#2].&"
        }
      }
    }
  }
]

демо на сайте https://jolt-demo.appspot.com/ это:

Обновлено: следующий вариант (который предложил @samersaleh [спасибо ему]) будет более простым:

[
  { 
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "*": "&2.DATE[]"
        }
      }
    }
  }
]

Спасибо за вашу поддержку @Barbaros Ozhan. Но мне нужно упомянуть каждое поле (например, код, имя, дату, версию, продано и т. д.) в спецификации толчка (например, "код": "рынок[&1].код", "имя": "рынок[&1].имя" ), так что любые дополнительные поля входят во входной json, кроме того, что определено в спецификации json, тогда эти дополнительные поля следует игнорировать и не должны присутствовать в выходном json. но если мы предоставим *, все поля будут помещены в выходной json. Пожалуйста, дайте мне знать, если что. Спасибо!

Optimizer 27.04.2024 12:49

Конечно, @Optimizer. В таком случае вы пишете один за другим, как вы это делали, или "code|name|date|rev|sold": "&3.&2_&1.&" или продолжаете использовать "*":"&" модель пары ключ-значение, как я уже сделал, и добавляете дополнительную спецификацию «удалить», чтобы избавиться от всех нежелательных атрибутов.

Barbaros Özhan 27.04.2024 12:57

@Optimizer понял, что я пропустил добавленный прямо сейчас DATE, будьте осторожны.

Barbaros Özhan 27.04.2024 13:25

@Barbaros Özhan, если не указывать поля, я не вижу способа сделать это без второго толчка, но если это не так, то одной спецификации толчка должно быть достаточно, если только я что-то не упускаю: [ { "operation": "shift ", "spec": { "": { "": { "*": "market.DATE[]" } } } } ]

samer saleh 27.04.2024 16:45

Ты прав @samersaleh, твое предложение лучше

Barbaros Özhan 27.04.2024 16:50

Барбарос Ожан и @samersaleh Спасибо за вашу поддержку. Это сработало. !!

Optimizer 29.04.2024 13:27

Другие вопросы по теме