Преобразование Dataweave преобразования объектов с одним и тем же ключом в массив объектов

Пример ниже содержит тот же ключ «строка». Таких объектов могут быть тысячи. Мне нужно оптимальное решение для преобразования объекта ниже:

{
    "row":{
        "name": "abc"
    },
    "row":{
        "school": "pqr"
    }
}

Требуемый результат:

{
    "rows":
    [
        {
            "name": "abc"
        },
        {
            "school": "pqr"
        }
    ]
}

Что именно для вас "оптимально"? Вам нужно определить критерии для оценки ответов и решить, какой из них более оптимален.

aled 18.04.2023 13:36

Оптимальный в смысле поиска менее дорогого решения. Потому что там будет около 7000 объектов и ключ для всех них как «строка».

Mule-Newbie 19.04.2023 14:32

Опять дорого в каком смысле? Конкретный показатель? Какой-то из ответов не соответствует критериям?

aled 19.04.2023 15:13

Ответы идеальны и отлично работают. Спасибо вам за это; Не могли бы вы указать мне тот, который будет меньше влиять на память и будет быстрее.

Mule-Newbie 19.04.2023 15:58

Нет. Я могу предположить, что это ответ с использованием селектора с несколькими значениями, потому что он использует только одну простую операцию, но на самом деле это подразумевает тестирование производительности в реальных условиях (т.е. аналогичные полезные нагрузки и аппаратное/программное обеспечение, которые вы ожидаете в производстве ), измеряя интересующие вас показатели и анализируя их.

aled 19.04.2023 16:24
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
5
59
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Здесь groupBy поможет сгруппировать похожие ключи, а pluck преобразует объект в массив.

  • Решение 1: использование mapObject(). Это лучшее решение, так как здесь исключено 2 щипка по сравнению со вторым решением ниже.
%dw 2.0
output application/json
---
(payload groupBy $$) mapObject (($$): ($ pluck $))

Вход

{
    "row":{
        "name": "abc"
    },
    "row":{
        "school": "pqr"
    }
}

Выход

[
  {
    "row": [
      {
        "name": "abc"
      },
      {
        "school": "pqr"
      }
    ]
  }
]
  • Решение 2: использование карты()

Если вы хотите, чтобы строки были жестко закодированы, замените (($ pluck $$)[0]):($ pluck $) на ("rows"):($ pluck $)

%dw 2.0
output application/json
---
(payload groupBy $$)pluck $ map{
    (($ pluck $$)[0]):($ pluck $)
}
Ответ принят как подходящий

Просто используйте селектор с несколькими значениями, чтобы получить все ключи с одним и тем же ключом. имя:

https://docs.mulesoft.com/dataweave/2.4/dataweave-selectors

%dw 2.0
output application/json
---
rows: payload.*row

Это самое простое решение.

aled 18.04.2023 13:37

Он хорошо работает, если все имена ключей являются только строками @aled. В вопросе его приведенный ниже пример содержит «строку»

Karthik 18.04.2023 14:43

Этот ответ работает для условий вопроса. Если ключи могут быть разными, это следует упомянуть в вопросе.

aled 18.04.2023 15:23

Все объекты будут иметь одинаковый ключ, например. ряд в этом случае.

Mule-Newbie 19.04.2023 14:35

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