Извлечение ключевого значения из Json - Mule Dataweave - PullRequest
1 голос
/ 08 мая 2020

Я не могу получить значение ключа из Json. Подробная информация о преобразовании xml в Json приведена ниже.

Входные данные XML:

 <DeliveryDetails>
  <Information>
    <InformationLines>
        <InformationLine>
            <InformationLineId>1001</InformationLineId>
            <ProductId>PREBC518</ProductId>
            <ProductDescr>Bag  </ProductDescr>
            <NumberBase>150.00000000</NumberBase>
            <UnitBase>BAG</UnitBase>               
        </InformationLine>
        <InformationLine>
            <InformationLineId>1001</InformationLineId>
            <ProductId>PREBC518</ProductId>
            <ProductDescr>Bag delivery</ProductDescr>
            <NumberBase>150.00</NumberBase>
            <UnitBase>BAG</UnitBase>               
        </InformationLine>
        <InformationLine>
            <InformationLineId>1003</InformationLineId>
            <ProductId>PREBC518</ProductId>
            <ProductDescr>test</ProductDescr>
            <NumberBase>70.00</NumberBase>
            <UnitBase>BAG</UnitBase>               
        </InformationLine>
        <InformationLine>
            <InformationLineId>1005</InformationLineId>
            <ProductId>PREBC518</ProductId>
            <ProductDescr> dress </ProductDescr>
            <NumberBase>80.00</NumberBase>
            <UnitBase>BAG</UnitBase>               
        </InformationLine>               
    </InformationLines>
</Information>

       %dw 2.0
       output application/json
       var nb =  payload.DeliveryDetails.Information.InformationLines.*InformationLine groupBy 
          ($.InformationLineId  ) mapObject (value,key) -> { 
          (key): sum (value.NumberBase)
           }
       var test = "1001"
       ---
       nb

Приведенное выше выражение дает результат ниже

        {

          "1005": "80.00",
          "1003": "70.00",
          "1001": 300.00
        }

Имеются 2 вопроса

1) когда я использую ts.'1001', я могу получить "300.00", если я использую "ts.test", оно не получает значение?, В идеале указанное выше test может быть присвоено другому значению, поэтому я ищу динамическое c извлечение.

2) Используя указанное выше XML Ввод на основе условия "($ .InformationLineId ==" 1001 ") Мне нужно только получить «сумму BaseNumber».

Я считаю, что этого легко добиться, используя функцию reduce в Mule4, но я не уверен, как выполнить условие на основе reduce. Не требуется использовать выше dataweave logi c. Мне просто нужно указать c значение, если InformationLineId =="1001" его сумма «BaseNumber»

Пожалуйста, дайте мне знать, если вопрос не ясен. Заранее спасибо.

1 Ответ

1 голос
/ 08 мая 2020

Что касается ваших вопросов: 1) ответ: Dynami c селектор , поэтому для вашего примера вы можете сделать ts."${test}" 2) Относительно этого вопроса неясно, что вы пытаетесь сделать в следующий раз, пожалуйста опубликуйте ожидаемый результат, но я получаю, что вы пытаетесь получить сумму всех NumberBase, для которых InformationLineId является значением переменной test. Если да, то ответ будет

%dw 2.0
output application/json

var test = "1001"

var nb =  sum(payload.DeliveryDetails.Information.InformationLines.*InformationLine 
            filter ($.InformationLineId == test) 
            map ((value) -> value.NumberBase as Number))

---
nb

Если нет, перефразируйте свой вопрос

...