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

如何通过JOLT转换扁平化含嵌套JSON字符串的JSON对象

需求可行性分析与实现方案

首先要明确:你给出的目标JSON存在重复的ItemId键,这违反了JSON对象键必须唯一的语法规范,无法生成合法的JSON结构。需要先修正这个问题,比如把SourceData里的ItemId重命名为SourceItemId,修正后的目标结构如下:

{
  "type" : "api.something, api.somethingElse",
  "Id" : "d1537a72-2e46-29c0-b119-2bac07857ka9",
  "ItemId" : "d1537a72-2e46-29c0-b119-2bac07869t8",
  "Amount" : 50,
  "Increased" : 10,
  "Type" : "increasment",
  "isIncreasment" : true,
  "SourceItemId" : "d1258672-3592-29c0-b119-2bac07857ka9",
  "testID" : 105,
  "ListId" : 18576,
  "Date": "2023-06-15T13:47:57.66"
}

注:你提供的目标里ItemId值从原数据的d1537a72...变成了a1537a72...、Date从2023-06-12变成2023-06-15,如果是笔误则忽略,若是需要固定修改,会在JOLT规则里处理。

实现步骤与JOLT规则

使用JOLT的modify-overwrite-beta和shift操作组合完成转换:

1. 解析SourceData的JSON字符串

先把fromApi.SourceData这个JSON字符串解析成JSON对象,方便后续提取字段。

2. 扁平化所有字段并重命名指定键

将根节点的$type重命名为type,提取fromApi下的所有字段,再提取解析后的SourceData字段,同时处理重复键的重命名,以及日期的修改(如果需要)。

完整的JOLT规范如下:

[
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "fromApi": {
        "SourceData": "=jsonParse(@(1,SourceData))"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "$type": "type",
      "fromApi": {
        "Id": "Id",
        "ItemId": "ItemId",
        "Amount": "Amount",
        "Increased": "Increased",
        "Type": "Type",
        "SourceData": {
          "isIncreasment": "isIncreasment",
          "ItemId": "SourceItemId",
          "testID": "testID",
          "ListId": "ListId"
        },
        // 如果需要固定修改日期,用下面的赋值;如果是笔误,直接用@(1,Date)
        "Date": {
          "#2023-06-15T13:47:57.66": "Date"
        }
        // 若日期不需要修改,替换成 "Date": "Date"
      }
    }
  }
]

规则说明

  • modify-overwrite-beta:调用jsonParse函数把SourceData的字符串转成JSON对象,这样才能提取里面的字段。
  • shift:
    • 把根节点的$type映射到type;
    • 提取fromApi下的常规字段;
    • 从解析后的SourceData里提取字段,把原ItemId重命名为SourceItemId避免冲突;
    • 日期部分如果需要固定修改,用#赋值固定字符串;如果只是笔误,直接映射原字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:40:12