【问题标题】:Parse JSON Response Array using ForEach component in WSO2 ESB在 WSO2 ESB 中使用 ForEach 组件解析 JSON 响应数组
【发布时间】:2017-07-07 04:05:33
【问题描述】:

我需要解析包含产品数组(P1、P2、P3 等)的 JSON 响应。每个产品都包含多个信息,如名称、类型、成本等。

我需要逐个读取每个产品,并将从另一个服务获取的附加数据附加到新的 JSON 输出中。我正在考虑使用 WSO2 ESB 的 ForEach 组件来逐个迭代每个产品。

问题是 ForEach 组件使用了 ForEachExpression,它在配置中需要 XML 表达式。

请在WSO2 ESB中一一解析JSON响应数组的方法。

/阿布舍克

【问题讨论】:

    标签: wso2 wso2esb wso2carbon


    【解决方案1】:

    可以使用 Iterate 或 ForEach 中介器来迭代 JSON 数组,因为两者都是内容感知中介器并支持 JSON。

    使用哪一个取决于特定的用例,因为 Iterate 提供了按顺序使用调用/调用/发送中介的能力,而 ForEach 不允许这样做。

    对于下面给出的示例 JSON 请求,以下迭代可以工作,并且 JSON 数组和对象可以像相同的方式引用。

    {
       "products":[
          {
             "product":{
                "id":"1234",
                "size":"20",
                "quantity":"1",
                "price":"990",
                "type":"Electronics",
                "store":{
                   "id":"001"
                }
             }
          }
       ]
    }
    
    <iterate expression="//products" id="PRD_ITR">
        <target>
          <sequence>
            <sequence key="Product_Enrich_Sequence_s"/>
            <!-- For example, Switching sequence based on the product type -->
            <switch source="//products/product/type">
              <case regex="Computer">
                <sequence key="Computer_Product_Enrich_Sequence_s"/>
              </case>
              <case regex="Mobile">
                <sequence key="Mobile_Product_Enrich_Sequence_s"/>
              </case>
              <case regex="Grocery">
                <sequence key="GR_Product_Enrich_Sequence_s"/>
              </case>
              <default>
                <!-- default stuff --!>
              </default>
            </switch>
          </sequence>
        </target>
      </iterate>
    

    财政年度

    https://docs.wso2.com/display/ESB490/Iterate+Mediator

    https://docs.wso2.com/display/ESB490/ForEach+Mediator

    注意:在 WSO2 ESB 4.9.0 中测试

    【讨论】:

    • 我需要逐个获取每个产品的值,然后将其放回单个 JSON 响应中。 WSO2 ESB 是否在内部将所有类型的消息类型(如 JSON 等)转换为 XML 以进行进一步处理?
    • 是的..它的作品就是这样。将 json 转换为 xml 以供其内部处理。您可以将最终响应指定为 JSON 或通过 XSLT 或 payloadfactory 进行处理。上面的答案有用吗?
    • 对于超过 8000 行的 JSON 文件,您不认为它会严重损害内部从 JSON 转换为 XML 的性能吗?同时,我注意到从 JSON 到 XML 的内部转换在某种意义上给出了错误的结果,没有生成正确的 XML 结构。我们这里有什么限制吗?
    • 是的,这种内部转换存在开销。当您在转换过程中谈论错误结果时,这取决于您使用的 JSON 格式化程序和构建器。 WSO2 对此提供了很少的选择。检查您的及其各自的文档。对于少数情况,可能还需要一些 XSLT 调解..
    猜你喜欢
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2017-12-02
    • 2021-08-15
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多