【问题标题】:Mule payload is not showing correct dataMule 有效载荷未显示正确的数据
【发布时间】:2017-03-28 05:39:34
【问题描述】:

payload中有以下格式的订单数据。

{
    "orders" : {
        "order" : [ {
            "id" : "4358294728",
            "fulfillment" : {
                "tracking_number" : "917",
                "line-items" : {
                    "id" : "8367649608"
                }
            }
        }, {
            "id" : "4358301768",
            "fulfillment" : {
                "tracking_number" : "918",
                "line-items" : [ {
                    "id" : "8367663240"
                }, {
                    "id" : "8367663304"
                }, {
                    "id" : "8367663368"
                } ]
            }
        } ]
    }
}

我想得到总数。来自这个有效载荷的订单。 我为此使用#[message.payload.orders.order.size()]。 它给出了正确的输出。

但是对于单个订单,它给出了错误的输出 = 2。但它会是 1。

{
    "orders" : {
        "order" : {
            "id" : "4358153416",
            "fulfillment" : {
                "tracking_number" : "915",
                "line-items" : {
                    "id" : "8367362760"
                }
            }
        }
    }
}

你能帮我得到想要的输出吗?

【问题讨论】:

    标签: json mule payload anypoint-studio


    【解决方案1】:

    我认为问题出在您的 json 结构中。 第二个:

    {
        "orders" : {
            "order" : {
                "id" : "4358153416",
                "fulfillment" : {
                    "tracking_number" : "915",
                    "line-items" : {
                        "id" : "8367362760"
                    }
                }
            }
        }
    }
    

    项目order 不是一个数组,因此它给出'2' 作为结果,因为它里面有两个元素:idfullfillment

    您可以通过正确生成 json 来解决这个问题,它会像这样(检查 de '[ ]' ):

    {
        "orders" : {
            "order" : [{
                "id" : "4358153416",
                "fulfillment" : {
                    "tracking_number" : "915",
                    "line-items" : {
                        "id" : "8367362760"
                    }
                }
            }]
        }
    }
    

    此外,order 项不必是明确的。你只需要一个orders 的数组。原来的json应该是:

    {
        "orders" : [ 
             {
                "id" : "4358294728",
                "fulfillment" : {
                    "tracking_number" : "917",
                    "line-items" : {
                        "id" : "8367649608"
                    }
                }
            }, 
            {
                "id" : "4358301768",
                "fulfillment" : {
                    "tracking_number" : "918",
                    "line-items" : [ {
                        "id" : "8367663240"
                    }, {
                        "id" : "8367663304"
                    }, {
                        "id" : "8367663368"
                    } ]
                }
            } 
          ]   
    }
    

    【讨论】:

      【解决方案2】:

      我通过以下配置得到正确的数字:-

       <http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/>
        <flow name="Flow1" >
          <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
          <json:json-to-object-transformer doc:name="JSON to Object" returnClass="java.util.HashMap"/>
          <logger message="Order size #[message.payload.orders.order.size()] " level="INFO" doc:name="Logger"/>
          <json:object-to-json-transformer doc:name="Object to JSON"/>
         </flow>   
      

      是的,您的 JSON 不正确。应该是:-

      {
          "orders" : {
              "order" :[ {
                  "id" : "4358153416",
                  "fulfillment" : {
                      "tracking_number" : "915",
                      "line-items" : {
                          "id" : "8367362760"
                      }
                  }
              }]
          }
      }
      

      下单后您错过了[

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-08
        • 2012-02-08
        • 1970-01-01
        • 1970-01-01
        • 2011-01-19
        • 1970-01-01
        相关资源
        最近更新 更多