2016-06-16 23 views
3

このような何かに変換しようとしたとき、私は私の変換されたオブジェクトにnull値を取得しています。これにJoltを使用して配列を変換するにはどうすればよいですか?

{ 
    "employees": [ 
    { "f_name" : "tom", "l_name" : "smith" }, 
    { "f_name" : "don", "l_name" : "jones" } 
    ] 
} 

{ 
    "employees": [ 
    { "firstName" : "tom", "lastName" : "smith" }, 
    { "firstName" : "don", "lastName" : "jones" } 
    ] 
} 

これは私が使用していますスペックです:

[ 
    { 
    "operation" : "shift", 
    "spec" : { 
     "employees" : { 
     "f_name" : "firstName" 
     "l_name" : "lastName" 
     } 
    } 
] 

これは私が使用しているコードです:

List<Object> chainrSpecJSON = JsonUtils.classpathToList("path/spec.json"); 
Chainr chainr = Chainr.fromSpec(chainrSpecJSON); 
Object inputJSON = JsonUtils.classpathToObject("path/input.json"); 

Object transformed = chainr.transform(inputJSON); 
System.out.println(transformed); 

私は正常に上記と同じ仕様とコードで以下の入力を変換することができました:

{ 
    "employees": 
    { "firstName" : "tom", "lastName" : "smith" } 
} 

だから私は、従業員オブジェクトの配列を変換するために何をすべきかが必要ですか?

答えて

8

この仕様では、あなたが

[ 
    { 
    "operation": "shift", 
    "spec": { 
     "employees": { 
     "*": { 
      "f_name": "employees[&1].firstName", 
      "l_name": "employees[&1].lastName" 
     } 
     } 
    } 
    } 
] 

何をしたい重要なことは、あなたがダウンしF_NAMEへ/試合を再帰ときに、従業員の配列のすべての要素を通してループに「*」を使用する必要があるんやl_nameの場合、[& 1]を使用して索引配列を参照する必要があります。これは、ツリーを2つのレベル、0と1の間で検索し、出力の索引配列として使用することを意味します。

+0

「従業員[&1]」(マッチングキーの再利用のような)で「従業員」を指定しない方法はありますか? – GournaySylvain

+3

"f_name": "&2 [&1] .firstName" –

関連する問題