2017-11-02 1 views
0

존재하지 않는 필드를 다른 필드의 값으로 대체하는 것에 대해 question이 나타났습니다. modify-default-beta의 사용법을 설명합니다. 포스트에 언급 된 예 :Jolt : modify-default-beta : 첫 번째 인수는 무엇을합니까?

사양

[ 
    { 
    "operation": "modify-default-beta", 
    "spec": { 
     "shipping_address": { 
     "address": "@(2,payment_address.address)" 
     } 
    } 
    } 
] 

입력 A,이 출하되지 않은 주소

{ 
    "payment_address": { 
    "address": "some address" 
    }, 
    "shipping_address": {} 
} 

는 청구서 주소가 복사 출력을 생성합니다

{ 
    "payment_address" : { 
    "address" : "some address" 
    }, 
    "shipping_address" : { 
    "address" : "some address" 
    } 
} 

이상

@(2,payment_address.address)에있는 "2"의 의미는 무엇입니까? 이 예제를 here 시도하고 "2"를 "3"으로 바꾸더라도 작동합니다.

답변

0

Jolt 연산은 입력 JSON과 Spec의 병렬 트리 워크를 수행합니다. Spec &의 루트 인 JSON에서 시작하여 깊이 우선 탐색을 수행합니다.

깊이를 먼저 탐색하는 동안 일치하는 데이터/노드의 "스택"을 유지 관리합니다. 이 사양에 따라서

, 당신 "일치" "주소"

"operation": "modify-default-beta", 
"spec": { 
    "shipping_address": { 
    "address": "@(2,payment_address.address)" 
    } 
} 

스택의 모습에 이르기까지 :

Stack "pointer" Matched value  Pointer to Input 
0    "address"   Value of Address : String if it exists 
1    "shipping_address" Value of "shipping_address" : Map if it exists 
2    "_root_"   A made up entry to point to Input Json (Map or List) 
3    "_root_"   Another "root" that points to a Map 
             WorkAround to deal with top level List JSON input 
그래서

은 "2" "다시 최대를 얻는다 입력 Json의 "최상위 레벨"로 이동하여 "payment_address.address"를 "탐색"할 수 있습니다.

"3"은 이제 변환에 대한 모든 "최상위"입력이 Map이되도록 래퍼로되어 있기 때문에 유효한 JSON 인 경우 최상위 목록/"[]" . 이 랩퍼는 "2"와 동일한 참조를 갖는 특수한 케이스입니다.

"4"는 스택에 존재하지 않으므로 아무 것도 수행하지 않습니다.

관련 문제