Как объединить объект JSON внутри другого вложенного объекта JSON с помощью Dataweave 2.0

#dataweave

Вопрос:

У меня есть две входные полезные нагрузки, и я хочу объединить объект JSON внутри другого вложенного объекта JSON с определенным объектом. Ожидаемый результат-объединить ввод 2 с вводом 1 в разделе «Response_Data».

Я попытался, но смог объединить ввод 2 в конце, но не смог добавить его в «Response_Data».

Кто-нибудь может помочь мне написать код dataweave?

Вход 1:

 [{
    "Org_Response": {
        "Request_Criteria": {
            "Org_Type_Reference": {
                "ID": {
                    "type": "Org_Type",
                    "text": "Business_Unit"
                }
            },
            "Include_Inactive": "0"
        },
        **"Response_Data"**: {
            "Org": {
                "Reference": {
                    "ID": {
                        "type": "Business_Unit_Reference_ID",
                        "text": "999-99-FD"
                    }
                },
                "Org_Data": {
                    "Reference_ID": "999-99-FD",
                    "Name": "Management"
                }
            }
        }
    }
}]
 

Вход 2:

 {
    "Org": {
        "Reference": {
            "ID": {
                "type": "Business_Unit_Reference_ID",
                "text": "90000"
            }
        },
        "Org_Data": {
            "Reference_ID": "90000",
            "Name": "TAXES"
        }
    }
}
 

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

 [{
    "Org_Response": {
        "Request_Criteria": {
            "Org_Type_Reference": {
                "ID": {
                    "type": "Org_Type",
                    "text": "Business_Unit"
                }
            },
            "Include_Inactive": "0"
        },
        **"Response_Data"**: {
            "Org": {
                "Reference": {
                    "ID": {
                        "type": "Business_Unit_Reference_ID",
                        "text": "999-99-FD"
                    }
                },
                "Org_Data": {
                    "Reference_ID": "999-99-FD",
                    "Name": "Management"
                }
            },
            "Org": {
                "Reference": {
                    "ID": {
                        "type": "Business_Unit_Reference_ID",
                        "text": "90000"
                    }
                },
                "Org_Data": {
                    "Reference_ID": "90000",
                    "Name": "TAXES"
                }
            }
        }
    }
}]
 

Заранее спасибо

Ответ №1:

Для этого есть 2 варианта, но лучше повторить первый ввод, а затем добавить второй ввод соответственно, но вы можете попробовать сделать это ниже —

Первый DW —

 %dw 2.0
output application/json
var input1=[{
    "Org_Response": {
        "Request_Criteria": {
            "Org_Type_Reference": {
                "ID": {
                    "type": "Org_Type",
                    "text": "Business_Unit"
                }
            },
            "Include_Inactive": "0"
        },
        "Response_Filter": {
            "Page": "1",
            "Count": "999"
        },
        "**Response_Data**": {
            "Org": {
                "Reference": {
                    "ID": {
                        "type": "Business_Unit_Reference_ID",
                        "text": "999-99-FD"
                    }
                },
                "Org_Data": {
                    "Reference_ID": "999-99-FD",
                    "Name": "Management"
                }
            }
        }
    }
}]
var input2= [{
    "Org": {
        "Reference": {
            "ID": {
                "type": "Business_Unit_Reference_ID",
                "text": "90000"
            }
        },
        "Org_Data": {
            "Reference_ID": "90000",
            "Name": "TAXES"
        }
    }
}]
---
Org_Response : 
([input1[0].Org_Response - "**Response_Data**"]   
(input1.Org_Response."**Response_Data**"    input2))
 

Второй DW —

 %dw 2.0
output application/json
var input1=[{
    "Org_Response": {
        "Request_Criteria": {
            "Org_Type_Reference": {
                "ID": {
                    "type": "Org_Type",
                    "text": "Business_Unit"
                }
            },
            "Include_Inactive": "0"
        },
        "Response_Filter": {
            "Page": "1",
            "Count": "999"
        },
        "**Response_Data**": {
            "Org": {
                "Reference": {
                    "ID": {
                        "type": "Business_Unit_Reference_ID",
                        "text": "999-99-FD"
                    }
                },
                "Org_Data": {
                    "Reference_ID": "999-99-FD",
                    "Name": "Management"
                }
            }
        }
    }
}]
var input2= [{
    "Org": {
        "Reference": {
            "ID": {
                "type": "Business_Unit_Reference_ID",
                "text": "90000"
            }
        },
        "Org_Data": {
            "Reference_ID": "90000",
            "Name": "TAXES"
        }
    }
}]
---
Org_Response : input1.Org_Response map {
($ mapObject ((value, key, index) ->
{
     ((key) : value) if (key as String != "**Response_Data**"),
    ((key) : [value]   input2) if (key as String == "**Response_Data**")
}
 ))
}
 

Ответ №2:

Скрипт

 %dw 2.0
output application/json
var inp2= {
    "Org": {
        "Reference": {
            "ID": {
                "type": "Business_Unit_Reference_ID",
                "text": "90000"
            }
        },
        "Org_Data": {
            "Reference_ID": "90000",
            "Name": "TAXES"
        }
    }
}
var respData = payload.Org_Response."**Response_Data**"
var respDataNew = respData   inp2
---
[Org_Response: payload[0].Org_Response - "**Response_Data**"    
{
    "**Response_Data**": respDataNew
}]