Как объединить JSON-сегменты в Dataweave 1.0 - PullRequest
1 голос
/ 28 мая 2019

У меня есть некоторый dataweave 1.0 код, который выводит этот JSON.Я особенно заинтересован в 4 полях, для префикса которых я добавил «xxx_» для ясности

{
    "list_of_orders": {
        "order": [{
                "order_hdr": {
                    "HDR": "C",
                    "xxx_cust_long_text_2": "FREIGHT CHARGE APPLIES",
                    "customer_po_nbr": "55555",
                    "order_nbr": "99999",
                    "dest_dept_nbr": "12345",
                    "shipto_name": "BOB",
                    "shipto_addr3": "",
                    "shipto_addr": "VICTORIA STREET",
                    "shipto_addr2": "",
                    "shipto_city": "HAMILTON",
                    "cust_nbr": "13245",
                    "cust_name": "ROB",
                    "cust_addr3": "",
                    "cust_addr": "PO BOX 11111",
                    "cust_addr2": "MANUKAU CITY",
                    "cust_city": "AUCKLAND",
                    "ord_date": "2019-05-02",
                    "ship_via": "",
                    "xxx_cust_decimal_1": "",
                    "cust_decimal_3": 205.00,
                    "cust_decimal_4": 30.75,
                    "cust_decimal_5": 235.75,
                    "customer_po_type": "Y",
                    "facility_code": null,
                    "start_ship_date": "",
                    "stop_ship_date": "",
                    "company_code": null,
                    "order_type": "SBS",
                    "action_code": "CREATE"
                }
            },
            {
                "order_hdr": {
                    "HDR": "S",
                    "xxx_cust_long_text_2": "",
                    "customer_po_nbr": "55555",
                    "order_nbr": "99999",
                    "dest_dept_nbr": "12345",
                    "shipto_name": "BOB",
                    "shipto_addr3": "",
                    "shipto_addr": "VICTORIA STREET",
                    "shipto_addr2": "",
                    "shipto_city": "HAMILTON",
                    "cust_nbr": "13245",
                    "cust_name": "ROB",
                    "cust_addr3": "",
                    "cust_addr": "PO BOX 11111",
                    "cust_addr2": "MANUKAU CITY",
                    "cust_city": "AUCKLAND",
                    "ord_date": "2019-05-02",
                    "ship_via": "",
                    "xxx_cust_decimal_1": "10.00",
                    "cust_decimal_3": 205.00,
                    "cust_decimal_4": 30.75,
                    "cust_decimal_5": 235.75,
                    "customer_po_type": "Y",
                    "facility_code": null,
                    "start_ship_date": "",
                    "stop_ship_date": "",
                    "company_code": null,
                    "order_type": "SBS",
                    "action_code": "CREATE"
                }
            }
        ]
    }
}

(Обратите внимание, что тег HDR только что добавлен здесь, чтобы я мог видеть, откуда поступают данные - онне будет в конечном выводе)

Поэтому меня просят объединить два заголовка, используя эту логику

  • Возьмите xxx_cust_long_text_2 из HDR C
  • Takexxx_cust_decimal_1 из HDR S

Объедините их в один order_hdr, который выглядит следующим образом

        "order_hdr": {
          "xxx_cust_long_text_2": "FREIGHT CHARGE APPLIES",
          "customer_po_nbr": "55555",
          "order_nbr": "99999",
          "dest_dept_nbr": "12345",
          "shipto_name": "BOB",
          "shipto_addr3": "",
          "shipto_addr": "VICTORIA STREET",
          "shipto_addr2": "",
          "shipto_city": "HAMILTON",
          "cust_nbr": "13245",
          "cust_name": "ROB",
          "cust_addr3": "",
          "cust_addr": "PO BOX 11111",
          "cust_addr2": "MANUKAU CITY",
          "cust_city": "AUCKLAND",
          "ord_date": "2019-05-02",
          "ship_via": "",
          "xxx_cust_decimal_1": "10.00",
          "cust_decimal_3": 205.00,
          "cust_decimal_4": 30.75,
          "cust_decimal_5": 235.75,
          "customer_po_type": "Y",
          "facility_code": null,
          "start_ship_date": "",
          "stop_ship_date": "",
          "company_code": null,
          "order_type": "SBS",
          "action_code": "CREATE"
        }

Любая помощь будет оценена

Спасибо

1 Ответ

0 голосов
/ 31 мая 2019
%dw 1.0
%output application/json
%var headerS = payload.list_of_orders.order.order_hdr filter ($.HDR == "S") 
%var headerC  = payload.list_of_orders.order.order_hdr filter ($.HDR == "C") 
---
{
    header: payload.list_of_orders.order[0].order_hdr
        - "HDR"
        - "xxx_cust_decimal_1"
        - "xxx_cust_long_text_2"
        ++ { xxx_cust_decimal_1: headerS[0].xxx_cust_decimal_1}
        ++ { xxx_cust_long_text_2: headerC[0].xxx_cust_long_text_2}
}
...