2017-03-12 7 views
0

リクエスト本体に次のJSONがあります。私が欲しいものDataweaveのJSONプロパティ

{ 
    "Type": "Person", 
    "IndividualId": "acd47048-bd80-476e-aa33-741bd5cb05d3", 
    "Attributes": [ 
    {"Name":"FirstName","Value":"John"}, 
    {"Name":"LastName","Value":"Stewart"}, 
    {"Name":"Company","Value":"ABC"} 
    {"Name":"Country","Value":"United States"} 
    ] 
} 

のような名前のフィールドとしての属性を抽出することである。

{ 
"FirstName"="John", 
"LastName"="Stewart", 
"Company"="ABC", 
"Country"="United States" 
} 

それを反復し、Dataweaverの名前付きプロパティまたは任意の他の手段を抽出するために、とにかくはありますか?このリクエスト本体には、この例に限定されない任意の数のプロパティを含めることができます。

答えて

0

データウェイブを使用して、入力ペイロードで操作できます。出力は、要件に応じてjsonまたはjavaにすることができます。次のコードはうまくいくはずです。

 <dw:transform-message doc:name="Transform Message"> 
      <dw:input-payload mimeType="application/json"/> 
      <dw:set-payload><![CDATA[%dw 1.0 
%output application/json 
--- 
{(payload.Attributes map { 
    ($.Name) : $.Value 
})}]]> 
      </dw:set-payload> 
     </dw:transform-message> 

これが役に立ちます。次のように

0

単にfor loopを使用: -
Soultion1

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> 

    <flow name="testFlow"> 
     <http:listener config-ref="HTTP_Listener_Configuration" path="/store" doc:name="HTTP"/> 
     <expression-component doc:name="Expression"> 
     <![CDATA[ 
      StringBuffer sb = new StringBuffer(); 
      flowVars.stBuffer=sb; 
      ]]> 
     </expression-component> 
     <set-variable variableName="counter" value="1" doc:name="Variable"/> 
     <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/> 
     <foreach collection="#[payload.Attributes]" doc:name="For Each"> 
     <expression-component doc:name="Expression"> 
     <![CDATA[ 

     if(Integer.parseInt(flowVars.counter)>1) 
     { 
      flowVars.stBuffer.append(","+'"'+payload.Name+'" = "'+payload.Value+'"').toString() 
     } 
     else 
     { 
     flowVars.stBuffer.append('"'+payload.Name+'" = "'+payload.Value+'"').toString() 
     } 
     flowVars.counter= flowVars.counter +1; 
     ]]> 
     </expression-component>  
     </foreach> 
     <set-payload value="{#[flowVars.stBuffer.toString()]}" doc:name="Set Payload"/> 
    </flow> 

対処方法2:Dataweave

<flow name="testtFlow"> 
     <http:listener config-ref="HTTP_Listener_Configuration" path="/store" doc:name="HTTP"/> 
     <dw:transform-message doc:name="Transform Message"> 
     <dw:set-payload><![CDATA[%dw 1.0 
     %output application/java 
     --- 
    //This will iterate the value 
     { 
     (payload.Attributes map { 
      ($.Name) : $.Value 
     }) 
    }]]></dw:set-payload> 
     </dw:transform-message> 
     <object-to-string-transformer doc:name="Object to String"/> 
    </flow> 

出力は次のようになります - {"FirstName" = "John","LastName" = "Stewart","Company" = "ABC","Country" = "United States"}

関連する問題