当前位置: 首页 > 知识库问答 >
问题:

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

羊舌成周
2023-03-14

我想使用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
}

期望输出:

{
  "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中的示例,但我不知道如何做到这一点。

共有2个答案

蒯硕
2023-03-14

仍然有一个更简短、更动态的方法来解决你的问题,比如

[
  {
    "operation": "shift",
    "spec": {
      "myarray": {
        "*": {
          "v_518": {
            "@(1,&)": "&3.[&2].&",
            "@(1,lfdn)": "&3.[&2].lfdn"
          }
        }
      },
      "*": "&"
    }
  }
]
鲁望
2023-03-14

我能够解决我的问题。这个答案是我开始工作所需的提示:https://stackoverflow.com/a/38154541/1561441

该键引用了您当前正在通过< code>"value" = "array[

在我看来,我在这个问题上花了太多时间。有谁知道 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"
        }
      }
    }
  }
]
 类似资料:
  • 我正在尝试使用Jolt transformation转换一个JSON,在这里寻找一些输入。我正在尝试根据属性值进行过滤。 我的目标是获得一个数组,其中只包含动作为“remove”的项目。 这是我的输入和预期输出: 输入: 预期产出: 你能帮我写一个简单的规范吗?

  • 我正在尝试使用Jolt transformation转换一个JSON,在这里寻找一些输入。我试图通过属性的内部值进行过滤。 我的目标是获得一个只包含类型名为' xx '的项目的数组。 这是我的输入和预期输出: 输入: 预期产出: 你能帮我写一个简单的规范吗?

  • 我正在尝试编写一个规范来使用jolt转换进行以下转换。我只对更改json中键的名称感兴趣,值应该保持不变。帮帮我。 输入Json: 预期输出:

  • 我正在尝试使用Jolt transformation转换一个JSON,在这里寻找一些输入。我试图通过属性的内部值进行过滤。 我的目标是得到一个数组,它只包含类型为“xx”的项目。但不是所有的项目对象,只有一些字段 这是我的输入和预期输出: 输入: 预期产出: 你能帮我写一个简单的规范吗?

  • 我正在尝试使用 Jolt 转换来转换 Json,在这里寻找一些输入。我正在尝试过滤一个键,该键是另一个属性的值。这是我的输入和预期输出 我看到的输出是 我试过的规格是 但是我没有得到预期的输出。我也尝试了一些其他组合,但未能获得正确的输出。有人能帮忙吗?

  • 我正在尝试转换下面的输入 json 以扁平化必要的列名及其值,同时保留所有元数据。 下面是我的CDC用例的输入json。 下面是预期的输出 json 我尝试了下面的规范,我可以从中检索列对象,但不能检索其余的元数据。 任何线索将不胜感激。