Удалите дубликаты из вложенного массива JSON, используя спецификацию толчка

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

входной JSON:

[
  {
    "itemid": "1",
    "itemName": "coco",
    "itemType": "brg",
    "subitemId": "444",
    "subitemName": "INDICATIVE",
    "Status": "N"
  },
  {
    "itemid": "1",
    "itemName": "coco",
    "itemType": "brg",
    "subitemId": "333",
    "subitemName": "BRGS",
    "Status": "P"
  },
  {
    "itemid": "1",
    "itemName": "coco",
    "itemType": "brg",
    "subitemId": "444",
    "subitemName": "INDICATIVE",
    "Status": "N"
  },
  {
    "itemid": "1",
    "itemName": "coco",
    "itemType": "brg",
    "subitemId": "333",
    "subitemName": "BRGS",
    "Status": "P"
  },
  {
    "itemid": "2",
    "itemName": "limk",
    "itemType": "cmds",
    "subitemId": "456",
    "subitemName": "NMPS",
    "Status": "P"
  },
  {
    "itemid": "2",
    "itemName": "limk",
    "itemType": "cmds",
    "subitemId": "4568",
    "subitemName": "NMPSI",
    "Status": "P"
  },
  {
    "itemid": "2",
    "itemName": "limk",
    "itemType": "cmds",
    "subitemId": "456",
    "subitemName": "NMPS",
    "Status": "P"
  },
  {
    "itemid": "2",
    "itemName": "limk",
    "itemType": "cmds",
    "subitemId": "4568",
    "subitemName": "NMPSI",
    "Status": "P"
  },
  {
    "itemid": "3",
    "itemName": "limk",
    "itemType": "cmds",
    "subitemId": "789",
    "subitemName": "NMPS",
    "Status": "P"
  },
  {
    "itemid": "3",
    "itemName": "limk",
    "itemType": "cmds",
    "subitemId": "789",
    "subitemName": "NMPS",
    "Status": "P"
  },
  {
    "itemid": "3",
    "itemName": "limk",
    "itemType": "cmds",
    "subitemId": "789",
    "subitemName": "NMPS",
    "Status": "P"
  },
  {
    "itemid": "3",
    "itemName": "limk",
    "itemType": "cmds",
    "subitemId": "873",
    "subitemName": "NMSI",
    "Status": "N"
  },
  {
    "itemid": "3",
    "itemName": "limk",
    "itemType": "cmds",
    "subitemId": "873",
    "subitemName": "NMSI",
    "Status": "N"
  }
]

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

[
  {
    "work_item": {
      "itemid": "1",
      "itemName": "coco",
      "itemType": "brg",
      "wf_instance": {
        "subitems": [
          {
            "currentsubitemId": "444",
            "currentsubitemName": "INDICATIVE",
            "CurrentStatus": "NotPresent"
          },
          {
            "currentsubitemId": "333",
            "currentsubitemName": "BRGS",
            "CurrentStatus": "Present"
          }
        ]
      }
    }
  },
  {
    "work_item": {
      "itemid": "2",
      "itemName": "limk",
      "itemType": "cmds",
      "wf_instance": {
        "subitems": [
          {
            "currentsubitemId": "456",
            "currentsubitemName": "NMPS",
            "CurrentStatus": "Present"
          },
          {
            "currentsubitemId": "4568",
            "currentsubitemName": "NMPSI",
            "CurrentStatus": "Present"
          }
        ]
      }
    }
  },
  {
    "work_item": {
      "itemid": "3",
      "itemName": "limk",
      "itemType": "cmds",
      "wf_instance": {
        "subitems": [
          {
            "currentsubitemId": "789",
            "currentsubitemName": "NMPS",
            "CurrentStatus": "Present"
          },
          {
            "currentsubitemId": "873",
            "currentsubitemName": "NMSI",
            "CurrentStatus": "NotPresent"
          }
        ]
      }
    }
  }
]

Попробовал ниже спецификации толчка, но это не удаляет повторяющаяся запись внутри массива подэлементов с обновлением значения статуса из

от P до Present и

от N до NotPresent

[
  {
    "operation": "modify-default-beta",
    "spec": {
      "*": {
        "comp_id": "=concat(@(1,itemid),'_', @(1,itemName), '_', @(1,itemType))"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "@(1,comp_id).&[]"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[#2].&",
        "comp_id": null
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "itemid": "=firstElement(@(1,itemid))",
        "itemName": "=firstElement(@(1,itemName))",
        "itemType": "=firstElement(@(1,itemType))"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "itemid": "[&1].work_item.itemid",
        "itemName": "[&1].work_item.itemName",
        "itemType": "[&1].work_item.itemType",
        "subitemId": {
          "*": "[&2].work_item.wf_instance.subitems[&].currentsubitemId"
        },
        "subitemName": {
          "*": "[&2].work_item.wf_instance.subitems[&].currentsubitemName"
        },
        "Status": {
          "*": "[&2].work_item.wf_instance.subitems[&].CurrentStatus"
        }
      }
    }
  }
]
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете сгруппировать по itemid и subitemId, добавив их к правым частям пар, например:

[
  {//grouping occurs here while Status literals are chenged conditionally 
    "operation": "shift",
    "spec": {
      "*": {
        "item*": "@1,itemid.&",
        "sub*": "@1,itemid.subitems.@1,subitemId.current&",
        "Status": {
          "P": {
            "#Present": "@3,itemid.subitems.@3,subitemId.Current&2"
          },
          "N": {
            "#NotPresent": "@3,itemid.subitems.@3,subitemId.Current&2"
          }
        }
      }
    }
  },
  { //get rid of repetitions, eg. convert arrays to attributes 
    "operation": "cardinality",
    "spec": {
      "*": {
        "*": "ONE",
        "subitems": {
          "*": {
            "*": "ONE"
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": "[#2].work_item.&",
        "subitems": {
          "*": "[#3].work_item.wf_instance.&1[]"
        }
      }
    }
  }
]

Можно ли обновить спецификацию тряски, которой я поделился выше, добавив несколько операций, просто чтобы удалить дубликат и оставить все остальное прежним?

Manjunath k 21.08.2024 12:21

Сделанный. когда у вас будет время, пожалуйста, добавьте логику удаления дубликатов в спецификацию тряски, которой я поделился сверху. Я внес все изменения, аналогичные вводу, но наличие дочернего элемента партии требует помощи для удаления дубликата внутри объекта массива. заранее спасибо

Manjunath k 21.08.2024 13:23

Привет @Barbaros Özhan, не могли бы вы проверить запрос ниже, он похож на предложенное вами решение. stackoverflow.com/questions/78899638/…

Manjunath k 22.08.2024 10:06

Привет @Manjunathk, К сожалению, я сейчас занят, но я считаю, что идея и решение должны быть очень похожими.

Barbaros Özhan 22.08.2024 11:56

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