Mule ESB dataweave, как игнорировать нуль - PullRequest
0 голосов
/ 27 июня 2018

В муле ESB dataweave у меня возникают проблемы с игнорированием пустых объектов, {}. Я пытаюсь проверить, существует ли конкретная таблица в моих входных данных. Если он существует, я делаю некоторую бизнес-логику, если он не существует, он не должен быть включен в вывод. Тем не менее, я получаю {} вместо ничего.

Это мой входной файл:

{
  "srcTable": {
    "srcList": [
      {
        "tableNames": "table1",
        "src": [
          {
            "srcKey": [
              {
                "key": "date",
                "value": "01/01/2016"
              },
              {
                "key": "withinYearTotalMaxSection",
                "value": "2500"
              },
              {
                "key": "previousClaimsTotalMaxSection",
                "value": "25000"
              },
              {
                "key": "previousClaimsTotalMax",
                "value": "50000"
              }
            ]
          }
        ]
      },
      {
        "tableNames": "table2",
        "src": [
          {
            "srcKey": [
              {
                "key": "date",
                "value": "01/01/2016"
              },
              {
                "key": "type",
                "value": "A"
              },
              {
                "key": "garden",
                "value": "1000"
              },
              {
                "key": "risk",
                "value": "50000"
              }
            ]
          },
          {
            "srcKey": [
              {
                "key": "date",
                "value": "01/01/2016"
              },
              {
                "key": "type",
                "value": "B"
              },
              {
                "key": "garden",
                "value": "0"
              },
              {
                "key": "risk",
                "value": "50000"
              }
            ]
          }
        ]
      },
      {
        "tableNames": "table3",
        "src": [
          {
            "srcKey": [
              {
                "key": "date",
                "value": "01/01/2016"
              },
              {
                "key": "type",
                "value": "GLD"
              },
              {
                "key": "plants",
                "value": "1500"
              },
              {
                "key": "theft",
                "value": "3000"
              }
            ]
          },
          {
            "srcKey": [
              {
                "key": "date",
                "value": "01/01/2016"
              },
              {
                "key": "type",
                "value": "SVR"
              },
              {
                "key": "plants",
                "value": "0"
              },
              {
                "key": "theft",
                "value": "1000"
              }
            ]
          }
        ]
      }   
    ]
  }
}

Это мои данные:

%dw 1.0
%output application/json skipNullOn="everything"
---
{ 
  singlevalue: [
    {
      (payload.srcTable.srcList filter ($.tableNames == 'table1') map (r,pos)-> {
        (r.src map {
          ($.srcKey filter ($.key == 'date') map {
            name: 'date',
            value: $.value
          })
        })
      })
    },
    {
      (payload.srcTable.srcList filter ($.tableNames != null and $.tableNames == 'xxx') map (r,pos)-> {
        (r.src map {
          ($.srcKey filter ($.key == 'date') map {
            name: 'date' when $.value != null otherwise null,
            value: $.value
          })
        })
      })
    }
  ]
}

Этот выходной файл:

{  
  "singlevalue": [
    {
      "name": "date",
      "value": "01/01/2016"
    },
    {}
  ]
}

Может кто-нибудь подсказать, как избавиться от пустых предметов, {}, пожалуйста?

Спасибо и всего наилучшего NK

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

С помощью Джоша это решение, если кому-то интересно. Использование размера Of с комбинацией фильтров

%dw 1.0

% выходного приложения / json skipNullOn = "все"

{
singlevalue: [
({
    (payload.srcTable.srcList filter ($.tableNames == 'table1') map (r,pos)-> {
        (r.src map {
            ($.srcKey filter ($.key == 'date') map {
                name: 'date',
                value: $.value
            })
        })
    })
})  when (sizeOf (payload.srcTable.srcList filter $.tableNames == 'table1')) != 0,
({
    (payload.srcTable.srcList filter ($.tableNames != null and $.tableNames == 'xxx') map (r,pos)-> {
        (r.src map {
            ($.srcKey filter ($.key == 'date') map {
                name: 'date' when $.value != null otherwise null,
                value: $.value
            })
        })
    })
}) when (sizeOf (payload.srcTable.srcList filter $.tableNames == 'xxx')) != 0]}
0 голосов
/ 27 июня 2018

Самое простое, что нужно сделать, это удалить все пустые элементы в конце, как это:

%dw 1.0
%output application/json skipNullOn="everything"

%var transformation = [
    {
      (payload.srcTable.srcList filter ($.tableNames == 'table1') map (r,pos)-> {
        (r.src map {
          ($.srcKey filter ($.key == 'date') map {
            name: 'date',
            value: $.value
          })
        })
      })
    },
    {
      (payload.srcTable.srcList filter ($.tableNames != null and $.tableNames == 'xxx') map (r,pos)-> {
        (r.src map {
          ($.srcKey filter ($.key == 'date') map {
            name: 'date' when $.value != null otherwise null,
            value: $.value
          })
        })
      })
    }
  ]

%function removeEmptyObjects(e)
  e filter $ != {}
---
{ singleValue: removeEmptyObjects(transformation) }

Это выводит:

{
  "singleValue": [
    {
      "name": "date",
      "value": "01/01/2016"
    }
  ]
}
...