gpt4 book ai didi

xpath - 基于条件的 Mule 中的数组到平面映射

转载 作者:行者123 更新时间:2023-12-03 15:33:03 27 4
gpt4 key购买 nike

我正在尝试使用 Mule 中的 DataMapper 转换将来自 3rd 方调用的响应映射到不同的结构中。

从第 3 方我们收到一组项目(除其他外),我想将数组中的单个项目映射到一个对象 (JSON)。我收到请求中项目的标识符,该标识符可用作输入参数。

我的问题是,如何根据标识符映射项目的字段?

XML 响应示例

<account>
<accountNumber>1234567</accountNumber>
<books>
<book>
<id>1</id>
<title>Sample title1</title>
<availableFrom>21-03-16</availableFrom>
</book>
<book>
<id>2</id>
<title>Sample title2</title>
<availableFrom>21-03-16</availableFrom>
</book>
<book>
<id>3</id>
<title>Sample title3</title>
<availableFrom>21-03-16</availableFrom>
</book>
</books>
</account>

需要变成:
{
"person": {
"accountNumber": 1234567,
"selectedBook": {
"id": 1,
"title": "Sample title1"
},
"otherBooks": [
{
"id": 2,
"title": "Sample title2"
},
{
"id": 3,
"title": "Sample title3"
}
]
}
}

所选书籍的 id 保存在 inputArgument.bookId 中。

我可以使用每个字段的 xpath 规则完成映射,但是,我必须在 xpath 中对 bookId 进行硬编码。相反,我需要能够用实际 ID 替换提供的 ID(并且在 inputArgument 中可用)。

标题的 xpath
/account/books/book[child::id=1]/title

我曾尝试添加 MEL 来替换 id 和其他各种修复程序,但似乎没有任何效果。有没有办法替换 bookId 字段。

注意: 由于客户端限制,我无法使用 DataWeave。

最佳答案

使用 dataweave,你可以做这样的事情。

<dw:transform-message metadata:id="0ce877a9-29ed-401b-bd54-b90d42a1609f" doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%var bookId = "1"
%var account = payload.account
%var books = payload.account.books
%output application/json
---
{
person : {
accountNumber: account.accountNumber,
selectedBooks: (books.*book map {
id : $.id,
title: $.title
} filter $.id == bookId)[0],
otherBooks: books.*book map {
id : $.id,
title: $.title
} filter $.id != bookId
}
}]]></dw:set-payload>
</dw:transform-message>

关于xpath - 基于条件的 Mule 中的数组到平面映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36143244/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com