如何使用Jolt转换数组?

时间:2016-06-16 17:35:03

标签: java json 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" }
}

那么我需要做些什么来转换员工对象数组呢?

1 个答案:

答案 0 :(得分:12)

此规范可以满足您的需求

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

关键是你需要使用&#34; *&#34;循环遍历employees数组的所有元素,然后当你递归/匹配到f_name和l_name时,你需要使用[&amp; 1]引用索引数组,这意味着查找树的两个级别,零然后一个,并将其用作输出中的索引数组。