我正在使用XSLT中介器来形成以下JSON有效负载:

{
    "products": [
        {
          
            "product_id": 1,
            "product_name" : "abc"
           
        },
        {
            
            "product_id": 2,
           "product_name" : "xyz"
            
        }
    ]
}

根据我使用上述有效负载从API获得的响应,我需要创建另一个json有效负载(如下所示),并追加它以进行另一个API调用.

{
"amount": {
    "total_amount": 0.46,
    "total_tax": 0
  }
 }

我希望最终的有效载荷看起来像

 {
    "products": [
        {
          
            "product_id": 1,
            "product_name" : "abc"
           
        },
        {
            
            "product_id": 2,
           "product_name" : "xyz"
            
        }
    ],
    
    "amount": {
    "total_amount": 0.46,
    "total_tax": 0
  }
}

我如何在WSO2集成工作室上实现这一点?

推荐答案

我认为XSLT对于这一点来说太过分了,我认为Datamapper在这里不是一个可行的 Select ,因为我们正在处理多个输入.你可以简单地用Enrich Mediator来做这件事.以下是您的有效负载的一个示例.我试图提供一个接近您需求的示例,我已经对有效负载进行了硬编码,Payload Factory描述了您的后端调用响应和原始的PL.

<?xml version="1.0" encoding="UTF-8"?>
<api context="/json" name="TestAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="GET">
        <inSequence>
            <payloadFactory description="Build JSON" media-type="json">
                <format>
                    {
                        "products": [
                            {
                                "product_id": 1,
                                "product_name" : "abc"   
                            },
                            {  
                               "product_id": 2,
                               "product_name" : "xyz"                               
                            }
                        ]
                    }
                    </format>
                <args/>
            </payloadFactory>
            <enrich description="First save the Original PL to a property" >
                <source clone="true" type="body"/>
                <target property="ORIGINAL_PL" type="property"/>
            </enrich>
            <payloadFactory description="Build JSON second PL" media-type="json">
                <format>
                    {
                        "amount": {
                            "total_amount": 0.46,
                            "total_tax": 0
                          }
                    }
                    </format>
                <args/>
            </payloadFactory>
            <enrich description="Save the PL from the second request to another property">
                <source clone="true" type="body"/>
                <target property="SECOND_PL" type="property"/>
            </enrich>
            <enrich description="Restore original payload">
                <source clone="false" property="ORIGINAL_PL" type="property"/>
                <target type="body"/>
            </enrich>
            <enrich description="Now add the second PL as a Child to the original" >
                <source clone="true" property="SECOND_PL" type="property"/>
                <target action="child" xpath="json-eval($)"/>
            </enrich>
            <log level="full"/>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

这就是上述情况的结果.

{
  "products": [
    {
      "product_id": 1,
      "product_name": "abc"
    },
    {
      "product_id": 2,
      "product_name": "xyz"
    }
  ],
  "amount": {
    "total_amount": 0.46,
    "total_tax": 0
  }
}

Json相关问答推荐

手动解开没有可编码的SON- Swift

当有嵌套数组而没有嵌套数组时,展平JSON

Jolt需要将缺少的值设置为空并保持相同的位置

如何在Vega中使标记的符号在鼠标指针悬停时可点击

解析SQL中的嵌套JSON

使用jq过滤复杂json对象中的数据

数据到jsonObject到数据到 struct 是可能的吗?

jq :当路径可变时更新 json 内容

使用 json 值过滤 Django 模型

在 rust 中从 API 反序列化 serde_json

Microsoft GRAPH 查询使用端点 /deviceManagement/deviceHealthScripts 列出了一种不熟悉的检测脚本内容格式

如何将西里尔字母转换为 utf16

序列化为json时如何忽略空列表?

Rails:format.js 或 format.json,或两者兼而有之?

如何使用 C# 将 JSON 文本转换为对象

在 Http Header 中使用 Json 字符串

如何在 django rest 框架中定义列表字段?

数据包含连续问号时无法理解的 jQuery $.ajax() 行为

在视图中将 .Net 对象转换为 JSON 对象

Jersey 2.0 相当于 POJOMappingFeature