0

0

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

碧海醫心

碧海醫心

发布时间:2025-07-21 15:54:21

|

631人浏览过

|

来源于php中文网

原创

使用 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[]"
          }
        }
      }
    }
  }
]

解释:

SCNet智能助手
SCNet智能助手

SCNet超算互联网平台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 数据,并确保输出始终为一个数组,从而简化了后续的数据处理步骤。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

411

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

532

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

74

2025.09.10

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

219

2023.12.07

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

MySQL数据库报错常见问题及解决方法大全
MySQL数据库报错常见问题及解决方法大全

本专题整合了MySQL数据库报错常见问题及解决方法,阅读专题下面的文章了解更多详细内容。

6

2026.01.13

PHP 文件上传
PHP 文件上传

本专题整合了PHP实现文件上传相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.6万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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