【问题标题】:Mule Expression to get individual object from a Json ArrayMule 表达式从 Json 数组中获取单个对象
【发布时间】:2017-03-11 22:32:37
【问题描述】:

想要从我的 json 有效负载中提取每个对象,如下所示:需要将此映射中的每个对象传递到拆分器或集合拆分器。我不能在这里使用 foreach 范围。

[
    {
        "Name": null,
        "Key": "4",
        "Header": {
        "Id": "14"
        }
    },
    {
        "Name": null,
        "Key": "5",
        "Header": {
        "Id": "15"
        }
    }
]

【问题讨论】:

    标签: mule mule-studio mule-component mule-el


    【解决方案1】:

    要从数组中获取整个对象,我们可以使用简单的#[payload],这将像每个范围一样小心。

    【讨论】:

      【解决方案2】:

      如果您想解析和访问 JSON 元素,那么 **<json:json-to-object-transformer/>** 是解决问题的方法。 java.util.HashMap or java.util.List or java.util.Map 取决于您的 JSON 数据的类型。 您也可以使用 java.lang.Object

      【讨论】:

      • 你也可以使用#[json:data/field]
      • 我建议不要使用#[json:data/field] 表达式。 JsonPath 表达式求值器已弃用。更多信息。可以在这里找到:docs.mulesoft.com/mule-user-guide/v/3.8/json-module-reference.
      • 我仍然遇到异常。即使我使用 java.util.List 或 java.lang.Object。 org.mule.api.transformer.TransformerMessagingException:转换的对象类型为:“SimpleDataType{type=java.lang.String, mimeType='/', encoding='null'}”,但是预期的返回类型是“SimpleDataType{type=java.util.List, mimeType='application/json', encoding='null'}”。 (org.mule.api.transformer.TransformerMessagingException)
      • 集合拆分器后,必须将对象添加到 json 转换器以摆脱上述异常
      【解决方案3】:

      有多种方法可以做到这一点: 1)如 Vijay 所述,使用 json-to-object 转换器将输入 json 映射到任何 Collection 类型,例如

       <json:json-to-object-transformer returnClass="java.util.List" doc:name="JSON to Object"/>
        <collection-splitter doc:name="Collection Splitter"/>
      

      2)使用dataweave从输入json数据中获取一个集合:

      <dw:transform-message doc:name="Transform Message">
                  <dw:set-payload><![CDATA[%dw 1.0
      %output application/java
      ---
      payload 
      ]]></dw:set-payload>
              </dw:transform-message>
      <collection-splitter doc:name="Collection Splitter"/>
      

      【讨论】:

      • 按照建议使用 dataweave 脚本时获取以下异常 Root Exception stack trace: java.lang.IllegalArgumentException: Object "com.mulesoft.weave.reader.ByteArraySeekableStream" 类型不正确。它必须是 org.mule.util.collection.EventToMessageSequenceSplittingStrategy.split 中的“{interface java.lang.Iterable,interface java.util.Iterator,interface org.mule.routing.MessageSequence,interface java.util.Collection}”类型(EventToMessageSequenceSplittingStrategy.java:65)
      • 您对 dataweave 的输入类型是什么?是json还是别的什么?
      猜你喜欢
      • 1970-01-01
      • 2022-11-18
      • 2018-10-15
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      相关资源
      最近更新 更多