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

如何通过JOLT根据photo/video属性名添加media_type字段?

JOLT规则补充:添加media_type字段

问题背景

现有两种JSON结构:

第一种JSON

[
  {
    "type": "link",
    "link": {
      "url": "https://google.com",
      "photo": {
        "id": 457467865,
        "owner_id": 2000016837,
        "sizes": [
          {
            "height": 89,
            "type": "a",
            "width": 200,
            "url": "https://sun9-41.userapi.com/LE7UgRqqunque4uSl2YxmK029tgImcFYHjpg"
          }
        ]
      },
      "title": "Test"
    }
  }
]

第二种JSON

[
  {
    "type": "link",
    "link": {
      "url": "amazon.com",
      "video": {
        "date": 1674803349,
        "duration": 30,
        "image": [
          {
            "url": "https://i.mycdn.me/getVideoPreview?id=3679686756942&idx=0&type=39&tkn=bKnXfn=vid_s",
            "width": 130,
            "height": 96,
            "with_padding": 1
          }
        ],
        "id": 456249970,
        "owner_id": -18098621
      },
      "title": "Test"
    }
  }
]

转换需求

  • 提取两种JSON共有的link.url和link.title字段;
  • 从photo或video对象中提取id和owner_id,拼接为新字段media_id;
  • 根据属性名(photo或video)添加新字段media_type。

以第二种JSON为例,期望转换结果:

{
  "owner_id" : -18098621,
  "title" : "Test",
  "url" : "amazon.com",
  "media_id" : "-18098621_456249970",
  "media_type": "video"
}

现有JOLT规则

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "link": {
          "photo|video": {
            "id": "id",
            "owner_id": "owner_id"
          },
          "title": "title",
          "url": "url"
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "media_id": "=concat(@(1,owner_id),'_',@(1,id))"
    }
  }
]

需要补充规则实现media_type字段的添加。


解决方案

要获取media_type,需要在shift操作阶段捕获photo或video的属性名,具体调整如下:

修改第一个shift操作的规则,为photo和video分别设置映射,直接将属性名赋值给media_type,同时保留原有字段提取逻辑。完整JOLT规则如下:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "link": {
          "photo": {
            "@": {
              "id": "id",
              "owner_id": "owner_id"
            },
            "#photo": "media_type"
          },
          "video": {
            "@": {
              "id": "id",
              "owner_id": "owner_id"
            },
            "#video": "media_type"
          },
          "title": "title",
          "url": "url"
        }
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "media_id": "=concat(@(1,owner_id),'_',@(1,id))"
    }
  }
]

规则说明

  1. shift阶段:
    • 拆分photo|video的合并写法,分别处理两个节点;
    • 通过#photo和#video直接为media_type赋值固定字符串,对应原属性名;
    • 用@引用当前节点(photo或video对象),继续提取id和owner_id。
  2. modify阶段:保留原有拼接media_id的逻辑不变。

验证效果

  • 第一种JSON转换后结果:
{
  "owner_id": 2000016837,
  "title": "Test",
  "url": "https://google.com",
  "media_id": "2000016837_457467865",
  "media_type": "photo"
}
  • 第二种JSON转换后结果与需求完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 08:35:33