Mule有效负载未显示正确的数据

时间:2016-11-14 14:35:25

标签: json mule payload anypoint-studio

以下格式订单数据在有效负载中。

{
    "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"
                }
            }
        }
    }
}

您能帮助我获得所需的输出吗?

2 个答案:

答案 0 :(得分: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"
                } ]
            }
        } 
      ]   
}

答案 1 :(得分:0)

我使用以下配置获得正确的号码: -

 <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"
                }
            }
        }]
    }
}

您错过了 [订购后