2016-06-22 8 views
0

에서 JSON으로 값을 교체 노새 페이로드 (infodata)Dataweave

[ 
     { 
     "status": "submitted", 
     "identity": "", 
     "papers": { 
      "code1": "12csd3cbsdj", 
      "code2": "skd02nd28dn", 
      "date": "2016-06-22", 
     "party": { 
      "due_date": "2016-06-22", 
      "personel": { 
       "email": "[email protected]", 
       "value": { 
        "amount": "0.10", 
        "inflation": "HIGH" 
       } 
      } 
     } 
    } 
} 
] 

내부 Dataweave, (1) 방법 대괄호를 제거하는 flowVars에? (2) flowVars에서 동적으로 금액 및 인플레이션 값을 대체하는 방법은 무엇입니까?

+0

우리는 여기에 모든 코더로서 힌트와 함께 도움이되는 사람들을 돕기 위해 데이터 위브 코드로 이미 시도한 것을 보여줄 수도 있습니다 ... – Dilettant

답변

0

질문 2 : dataweave에서 직접 flowVars를 사용할 수 있습니다. 또는 값이 URL에 있으면 inboundProperties을 사용하여 동적으로 값을 설정할 수 있습니다. 참조 : https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation 당신이 동적으로 it.Test URL이 흐름에 사용되는 정확한 수있는 세트 변수를 사용했다

: 내가 외부 설정 페이로드의 기능을 대체 사용한 질문 하나에 대해서 http://localhost:8083/test?inflation=HIGH

<flow name="testFlow"> 
    <http:listener config-ref="HTTP_Listener_Configuration" path="/" doc:name="HTTP"> 

    </http:listener> 
    <logger level="INFO" doc:name="Logger"/> 
    <set-variable variableName="dynamicValueAmount" value="#['2']" doc:name="Variable"/> 
    <dw:transform-message doc:name="Transform Message"> 
     <dw:set-payload><![CDATA[%dw 1.0 
     %output application/json 
     --- 
     [ 
     { 
    "status": "submitted", 
    "identity": "", 
     "papers": {  
    "party": { 
    "due_date": "2016-06-22", 
    "personel": { 
     "email": "[email protected]", 
     "value": { 
     "amount": flowVars.dynamicValueAmount, 
     "inflation": inboundProperties.'http.query.params'.inflation 

     }}}}} 
]]]></dw:set-payload> 
    </dw:transform-message> 
    <object-to-string-transformer doc:name="Object to String"/> 
     <set-payload value="#[ message.payload =org.mule.util.StringUtils.replace(message.payload,&quot;[&quot;,&quot;{&quot;);message.payload =org.mule.util.StringUtils.replace(message.payload,&quot;]&quot;,&quot;}&quot;)]" doc:name="Set Payload"/> 
      <logger level="INFO" doc:name="Logger"/> 
    </flow> 

(잘 작동 - 다른 방법). 나는 그것이 Dataweave 자체를 사용함으로써 표준 방식으로 달성 될 수 있다고 믿습니다. 대답을 기다리 자.

+0

감사합니다! 그래서 내 dataweave 구성 요소 내부에 난 그냥 아래처럼 페이로드를 참조 할 : 당신은 당신이되고 싶어하는 형식으로 페이로드를 참조 할 수 있습니다 % 1.0 % 출력 응용 프로그램/자바 --- { \t 페이로드 } –

+0

DW % output application/java 또는 xml % output application/xml 인 경우 % application/json 형식으로 Json 형식으로 응답하려는 경우. 데이터 저장에 허용 된'ValidTypes'에 대한 링크를 확인하십시오. https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation – star

+0

내 질문에 대한 답이 확실하지 않습니다. 분명한 것은 두 필드 (금액 및 인플레이션)에 대해서만 페이로드를 동적으로 변경해야한다는 것입니다. DW 구성 요소를 추가하는 질문을 업데이트했습니다. –

0

나는 여전히 동적 질문 # 2의 페이로드의 내용을 변경하는 방법을 이해하기 위해 노력하고있어 1

%dw 1.0 
%output application/java 
--- 
{ 
    data:flowVars.infodata replace /(\[|\])/ with "" 
} 

질문 번호를 해결했다.

0
  1. 샘플 flowVar 콘텐츠를 보면 json 개체의 배열처럼 보입니다. 그 맞습니까? 그것이 배열이고 그 다음에 데이터 위브라면 flowVars.infodata map {}을 반복하거나 첫 번째 객체 인 data: flowVars.infodata[0]을 얻을 수 있습니다.
  2. 콘텐츠를 동적으로 변경한다는 것이 실제로 의미하는 바가 확실하지 않습니다. @star는 데이터 저장 코드 내부의 모든 변수를 참조하는 방법을 보여주었습니다. 편집하려는 코드 일부를 추가 할 수 있습니까?