You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Jolt提取JSON数组指定键值对并移除原数组对应对象

Jolt处理:提取attrs中Details字段并移除原数组对象

问题描述

需要提取JSON中attrs数组里name为Details的对象,将其value作为顶级字段追加到输出JSON,同时移除attrs数组内的该对象。目前已成功添加顶级字段,但原数组中仍保留该对象,需解决移除问题。attrs.name = "Details"可位于数组任意位置。

输入输出示例

输入JSON

{
  "description": "Data",
  "number": "2022",
  "version": 1,
  "attrs": [
    {
      "name": "Type",
      "value": "DataPack"
    },
    {
      "name": "customerName",
      "value": "ABC"
    },
    {
      "name": "Details",
      "value": {
        "createdDate": "2020-09-10",
        "description": "Value Pack",
        "id": "20020",
        "state": "Complete",
        "requestedCompletionDate": "2022-09-13"
      }
    }
  ]
}

期望输出JSON

{
    "description": "Data",
    "number": "2022",
    "version": 1,
    "attrs": [
        {
            "name": "Type",
            "value": "DataPack"
        },
        {
            "name": "customerName",
            "value": "ABC"
        }
    ],
    "Details": {
        "createdDate": "2020-09-10",
        "description": "Value Pack",
        "id": "20020",
        "state": "Complete",
        "requestedCompletionDate": "2022-09-13"
    }
}

当前输出JSON(存在问题)

{
  "description": "Data",
  "number": "2022",
  "version": 1,
  "attrs": [
    {
      "name": "Type",
      "value": "DataPack"
    },
    {
      "name": "customerName",
      "value": "ABC"
    },
    {
      "name": "Details",
      "value": {
        "createdDate": "2020-09-10",
        "description": "Value Pack",
        "id": "20020",
        "state": "Complete",
        "requestedCompletionDate": "2022-09-13"
      }
    }
  ],
  "Details": {
    "createdDate": "2020-09-10",
    "description": "Value Pack",
    "id": "20020",
    "state": "Complete",
    "requestedCompletionDate": "2022-09-13"
  }
}

当前使用的Jolt配置

[    
  {
    "operation": "shift",
    "spec": {
      "attrs": {
        "*": {
          "name": {
            "Details": {
              "@(2,value)": "Details"
            }
          },
          "value": "attrs[#2].value",
          "@name": "attrs[#2].name"
        }
      },
      "*": "&"
    }
  }
]

修正后的Jolt配置

通过条件判断过滤掉attrs数组中的Details对象,修改后的配置如下:

[
  {
    "operation": "shift",
    "spec": {
      "attrs": {
        "*": {
          "name": {
            "Details": {
              "@(2,value)": "Details"
            },
            "*": {
              "@(2,name)": "attrs[#3].name",
              "@(2,value)": "attrs[#3].value"
            }
          }
        }
      },
      "*": "&"
    }
  }
]

配置说明

  • 针对attrs数组的每个元素,先对name字段做分支判断:
    • 若name为Details,仅提取其value到顶级Details字段,不向attrs数组写入该元素;
    • 若name为其他值(用*匹配所有非Details的情况),则将该元素的name和value写入attrs数组对应位置;
  • 顶级的description、number、version等字段通过*: &规则直接保留,无需额外处理。

内容的提问来源于stack exchange,提问作者sturaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:20:31