【问题标题】:How do I transform an array using Jolt?如何使用 Jolt 转换数组?
【发布时间】:2016-06-16 17:35:03
【问题描述】:

当我尝试转换类似这样的东西时,我的转换对象得到了一个空值:

{   
  "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" }
}

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

【问题讨论】:

    标签: java json jolt


    【解决方案1】:

    这个规范可以满足你的需求

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

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

    【讨论】:

    • 有没有办法在employees[&amp;1] 中不指定“员工”(例如重复使用匹配的密钥)?
    • 是的 "f_name": "&2[&1].firstName"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-19
    • 2021-10-05
    • 1970-01-01
    相关资源
    最近更新 更多