2017-11-02 8 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": {} 
} 

は、請求先住所がコピーされ、出力Aを、生成し

{ 
    "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"は、Transformsへのすべての "トップレベル"入力がマップになるラッパーになっているため動作します。有効なJSONの場合は最上位リスト/ "[]" 。このラッパーは、 "2"と同じ参照を持つために特別なケースです。

"4"はスタックに存在しないため、何もしません。

関連する問題