首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数据编织映射

数据编织映射
EN

Stack Overflow用户
提问于 2018-07-26 10:44:27
回答 1查看 37关注 0票数 0

我必须在数据编织中对JSON进行XML映射。请求XML是:

代码语言:javascript
复制
<Root>
<AccRoot>
    <FinRoot>
        <FinData>
            <SomeValue>Test</SomeValue>
        </FinData>
        <PassRoot>
            <PassData>
                <PassData2>
                    <Leg>001</Leg>
                    <Data>Sample1</Data>
                    <Data2>Sample2</Data2>
                    <Data3>Sample3</Data3>
                </PassData2>
            </PassData>
        </PassRoot>
            <PassData>
                <PassData2>
                    <Leg>002</Leg>
                    <Data>Sample21</Data>
                    <Data2>Sample22</Data2>
                    <Data3>Sample23</Data3>
                </PassData2>
            </PassData>
        <PassRoot>
            <PassData>
                <PassData2>
                    <Leg>003</Leg>
                    <Data>Sample31</Data>
                    <Data2>Sample32</Data2>
                    <Data3>Sample33</Data3>
                </PassData2>
            </PassData>
        </PassRoot>
        <PassRoot>
            <PassData>
                <PassData2>
                    <Leg>004</Leg>
                    <Data>Sample41</Data>
                    <Data2>Sample42</Data2>
                    <Data3>Sample43</Data3>
                </PassData2>
            </PassData>
        </PassRoot>
    </FinEntity>
</PrimeEntity>
</Root>

生成的JSON应该是

代码语言:javascript
复制
Result: Sample1:Sample2:Sample3.Sample21:Sample22:Sample23.Sample31:Sample32:Sample33.Sample41:Sample42:Sample43

也就是说,我必须将“PassData2”中的所有记录与“:”连接起来,然后我必须检查值为“+1”的“腿”是否存在,如果是,则必须对这些元素进行相同的操作,并使用“”加入它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-07 11:13:39

代码语言:javascript
复制
     %dw 1.0
 %output application/json
 ---
 {
     Result: payload.AccRoot.FinRoot..PassData2 
         orderBy ($.Leg as :number) 
         reduce ((val, acc = []) -> 
             (acc ++ [val]) when acc == [] or acc[-1].Leg as :number + 1 == val.Leg as :number 
             otherwise acc
         )
         map ([$.Data, $.Data2, $.Data3] joinBy ':')
         joinBy '.'
 }
  1. 选择所有PassData2节点
  2. 按腿部订购(以防订单混乱)
  3. 执行一次约简,以确保数组中唯一的元素是具有腿的顺序值的元素。
  4. 使用:作为分隔符将剩下的每个元素映射到其数据*节点的连接中
  5. 使用以下方法连接最后一个数组。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51536943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档