繁体   English   中英

JOLT 移位转换以过滤数组中的值

[英]JOLT shift transformation to filter values in array

我想使用 JOLT 转换来做两件事:

  • 过滤名为 myarray 的数组中的元素,以便仅保留具有“v_518”属性的元素
  • 过滤掉除“v_518”和“lfdn”之外的其余元素的所有属性

输入:

{
  "isError": false,
  "isValid": true,
  "myarray": [
    {
      "p_0001": "1",
      "p_0002": "1",
      "p_0003": "1",
      "p_0004": "1",
      "v_518": "0,214506186",
      "lfdn": 89709
    },
    {
      "p_0001": "2",
      "p_0002": "1",
      "p_0003": "1",
      "v_518": "0,3823236",
      "lfdn": 89710
    },
    {
      "p_0001": "3",
      "p_0002": "1",
      "p_0003": "1",
      "lfdn": 89711
    }
  ],
  "errorMessage": null,
  "exceptionMessage": null,
  "innerExceptionMessage": null
}

所需的 output:

{
  "isError": false,
  "isValid": true,
  "myarray": [
    {
      "v_518": "0,214506186",
      "lfdn": 89709
    },
    {
      "v_518": "0,3823236",
      "lfdn": 89710
    }
  ],
  "errorMessage": null,
  "exceptionMessage": null,
  "innerExceptionMessage": null
}

到目前为止我尝试过的,但没有按预期工作:

[
  {
    "operation": "shift",
    "spec": {
      "isError": "isError",
      "isValid": "isValid",
      "myarray": {
        // loop thru all the elements in value array
        "*": {
          "v_518": {
            // if the value "v_518" exists
            // grab the whole object and write it out to
            // a v_518_array array.
            "@(1,v_518)": "v_518_array",
            "@(1,lfdn)": "v_518_array"
          }
        }
      },
      "errorMessage": "errorMessage",
      "exceptionMessage": "exceptionMessage",
      "innerExceptionMessage": "innerExceptionMessage"
    }
  }
]

我尝试使用http://jolt-demo.appspot.com/#andrewkcarter2中的示例,但我不知道该怎么做。

我能够解决我的问题。 这个答案是我需要让球滚动的提示: https://stackoverflow.com/a/38154541/1561441

关键是通过"value" = "array[&1].value"引用您当前正在转换的数组。

在我看来,我在这个问题上花了太多时间。 有人知道 Jolt 语法的好文档吗? 我自己用谷歌搜索找不到满意的。

  [
      {
        "operation": "shift",
        "spec": {
          "isError": "isError",
          "isValid": "isValid",
          "myarray": {
            // loop thru all the elements in value array
            "*": {
              "v_518": {
                // if the value "v_518" exists
                // grab the whole object and write it out to
                // a v_518_array array.
                "@1": "v_518_array"
              }
            }
          },
          "errorMessage": "errorMessage",
          "exceptionMessage": "exceptionMessage",
          "innerExceptionMessage": "innerExceptionMessage"
        }
      },
      {
        "operation": "shift",
        //Transform array: https://stackoverflow.com/questions/37865871/how-do-i-transform-an-array-using-jolt
        "spec": {
          "v_518_array": {
            // loop thru all the elements in value array
            "*": {
              "v_518": "v_518_array[&1].v_518",
              "lfdn": "v_518_array[&1].lfdn"
            }
          }
        }
      }
    ]

这是一个稍微好一点的解决方案:

[
  {
    "operation": "shift",
    "spec": {
      "isError": "isError",
      "isValid": "isValid",
      "myarray": {
        // loop thru all the elements in value array
        "*": {
          "v_518": {
            // if the value "v_518" exists
            // grab the whole object and write it out to
            // a v_518_array array.
            "@1": "v_518_array"
          }
        }
      },
      "errorMessage": "errorMessage",
      "exceptionMessage": "exceptionMessage",
      "innerExceptionMessage": "innerExceptionMessage"
    }
  },
  {
    "operation": "shift",
    //Transform array: https://stackoverflow.com/questions/37865871/how-do-i-transform-an-array-using-jolt
    "spec": {
      "v_518_array": {
        // loop thru all the elements in value array
        "*": {
          "v_518": "&2[&1].v_518", //notice the generic shorthand here
          "lfdn": "&2[&1].lfdn"
        }
      }
    }
  }
]

还有一种更简洁、更动态的方法来解决您的问题,例如

[
  {
    "operation": "shift",
    "spec": {
      "myarray": {
        "*": {
          "v_518": {
            "@(1,&)": "&3.[&2].&",
            "@(1,lfdn)": "&3.[&2].lfdn"
          }
        }
      },
      "*": "&"
    }
  }
]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM