首页 > Java > java教程 > 正文

使用 JOLT 进行 Shift 转换:动态提取多层级 JSON 数据到数组

碧海醫心
发布: 2025-07-21 15:54:21
原创
621人浏览过

使用 jolt 进行 shift 转换:动态提取多层级 json 数据到数组

本文介绍如何使用 JOLT 的 shift 转换,将 JSON 数据中位于未知层级的特定字段提取到一个数组中。即使输入 JSON 的层级结构不固定,也能通过简单的 JOLT 规范实现目标,确保输出始终为一个包含提取值的数组。核心在于利用 JOLT shift 规范中的数组语法,强制生成数组结果,从而简化数据处理流程。

动态提取多层级 JSON 数据到数组的 JOLT Shift 转换

JOLT (JSON to JSON transformation) 是一种强大的 JSON 转换工具,可以用于重塑、过滤和转换 JSON 数据。 本文将重点介绍如何使用 JOLT 的 shift 操作,从具有动态层级结构的 JSON 数据中提取特定字段,并将它们收集到一个数组中。

问题描述

假设我们有一个 JSON 输入,其结构可能包含嵌套的 item 数组,并且嵌套的深度是不确定的。 我们的目标是从这些嵌套的 item 对象中的 foo 对象提取 nn 字段的值,并将它们收集到一个名为 type 的数组中。

例如,考虑以下输入:

{
  "id": 1,
  "item": [
    {
      "id": "1_1",
      "foo": {
        "id": 1232,
        "nn": "sdfsd"
      }
    }
  ]
}
登录后复制

我们期望的输出是:

{
  "type": [
    "sdfsd"
  ]
}
登录后复制

JOLT Shift 规范

解决此问题的关键在于使用 JOLT shift 操作符,并利用数组语法 [] 来强制生成数组结果。 以下是一个有效的 JOLT 规范:

[
  {
    "operation": "shift",
    "spec": {
      "item": {
        "*": {
          "item": {
            "*": {
              "item": {
                "*": {
                  "foo": {
                    "nn": "type[]"
                  }
                }
              },
              "foo": {
                "nn": "type[]"
              }
            }
          },
          "foo": {
            "nn": "type[]"
          }
        }
      }
    }
  }
]
登录后复制

解释:

怪兽AI数字人
怪兽AI数字人

数字人短视频创作,数字人直播,实时驱动数字人

怪兽AI数字人 44
查看详情 怪兽AI数字人
  • "operation": "shift":指定要执行的操作是 shift。
  • "spec":定义了转换的规则。
  • "item": 匹配输入 JSON 中的 item 字段。
  • "*": 匹配 item 数组中的任何元素。 这允许我们遍历未知深度的嵌套 item 数组。
  • "foo":匹配 item 中的 foo 对象。
  • "nn":匹配 foo 对象中的 nn 字段。
  • "type[]":将 nn 字段的值移动到输出 JSON 中名为 type 的数组中。 关键在于 [],它告诉 JOLT 始终生成一个数组,即使只有一个匹配项。

示例

假设我们有以下 JSON 输入:

{
  "id": 1,
  "item": [
    {
      "id": "1_1",
      "foo": {
        "id": 1232,
        "nn": "sdfsd"
      }
    },
    {
      "id": "1_2",
      "item": [
        {
          "id": "2_1",
          "foo": {
            "id": 4567,
            "nn": "dfsds"
          }
        }
      ]
    }
  ]
}
登录后复制

使用上述 JOLT 规范,我们将得到以下输出:

{
  "type": [
    "sdfsd",
    "dfsds"
  ]
}
登录后复制

即使输入 JSON 中 item 数组的嵌套深度不同, JOLT 也能正确地提取所有 nn 字段的值并将它们放入 type 数组中。

注意事项

  • 上述 JOLT 规范假定 nn 字段始终存在于 foo 对象中。 如果 nn 字段可能不存在,则需要添加额外的逻辑来处理这种情况,例如使用 default 操作符。
  • JOLT 规范的复杂性取决于输入 JSON 结构的复杂性。 对于更复杂的结构,可能需要更复杂的 JOLT 规范。

总结

通过使用 JOLT 的 shift 操作符和数组语法,我们可以轻松地从具有动态层级结构的 JSON 数据中提取特定字段,并将它们收集到一个数组中。 这使得我们可以轻松地处理各种 JSON 数据,而无需编写复杂的代码。

这段 JOLT 规范提供了一种简洁有效的方法来处理未知层级的 JSON 数据,并确保输出始终为一个数组,从而简化了后续的数据处理步骤。

以上就是使用 JOLT 进行 Shift 转换:动态提取多层级 JSON 数据到数组的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号