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

如何使用JOLT规范从JSON多字段值中提取指定子串?

问题:调整JOLT规范实现批量提取字符串子串

需求场景

需要对输入JSON的所有字段值,提取冒号与逗号之间的目标子串,实现如下转换效果:

输入JSON

{
  "key1": "ppp:qqq,rrr,",
  "key2": "111:222,",
  "key3": "aaa:bbb,"
}

期望输出JSON

{
  "key1": "qqq,",
  "key2": "222",
  "key3": "bbb"
}

当前问题

现有JOLT规范仅能处理key1单个字段,且输出结果不符合预期:

当前使用的JOLT规范

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*:*,*": {
          "$(0,2)": "key1"
        }
      }
    }
  }
]

当前输出结果

{
  "key1": "qqq"
}

修正后的JOLT规范

[
  // 第一步:提取每个字段值中冒号之后的部分
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": "=substringAfter(@, ':')"
    }
  },
  // 第二步:根据内容结构提取目标子串,同时保留原字段名
  {
    "operation": "shift",
    "spec": {
      "*": {
        // 匹配包含多个逗号的内容(如"qqq,rrr,"),提取第一个逗号及之前的部分并保留逗号
        "*:*": {
          "$(0,1),": "&2"
        },
        // 匹配仅含单个末尾逗号的内容(如"222,"、"bbb,"),提取逗号之前的部分
        "*": {
          "$(0,1)": "&2"
        }
      }
    }
  }
]

逻辑说明

  1. modify-overwrite-beta 阶段:通过substringAfter函数剥离每个字段值中冒号前面的内容,比如key1的值从ppp:qqq,rrr,变为qqq,rrr,。
  2. shift 阶段:
    • 针对包含多个逗号的字符串(如qqq,rrr,),通过*:*匹配规则,提取第一个逗号前的内容并拼接逗号,得到qqq,。
    • 针对仅含末尾逗号的字符串(如222,),通过*匹配规则,提取逗号前的纯内容,得到222。
    • &2用于引用二级父节点的字段名(即原有的key1、key2、key3),确保输出的键名与输入一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 08:20:05