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

如何通过Jolt转换从JSON数组的Tagscopy字段中提取键值对

如何通过Jolt转换从JSON数组的Tagscopy字段中提取键值对

看起来你需要把Tagscopy数组里那些格式有点“别扭”的键值对字符串,转换成每个对象的顶层属性,还要兼容Tags字段可能缺失的情况对吧?我来帮你调整Jolt规格,完美实现你要的效果:

最终可用的Jolt Spec

[
  // 第一步:解析Tagscopy中的每个键值对字符串,清理格式并拆分键和值
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "*": {
        "Tagscopy": {
          "*": {
            // 去掉首尾的引号,清理多余的转义引号
            "cleaned": "=replaceAll(replaceAll(&, '^\"', ''), '\"$', '')",
            // 拆分键和值(按": "分割)
            "splitKV": "=split(': ', @(1,cleaned))",
            // 提取键和值
            "key": "=firstElement(@(1,splitKV))",
            "value": "=lastElement(@(1,splitKV))"
          }
        }
      }
    }
  },
  // 第二步:把解析后的键值对提升到对象顶层
  {
    "operation": "shift",
    "spec": {
      "*": {
        // 保留原有字段
        "SourceId": "[&1].SourceId",
        "Tags": "[&1].Tags",
        "ResourceName": "[&1].ResourceName",
        // 遍历Tagscopy的每个元素,把key作为新字段名,value作为值
        "Tagscopy": {
          "*": {
            "key": "[&3].&",
            "value": "[&3].@(1,key)"
          }
        }
      }
    }
  },
  // 第三步:移除临时生成的中间字段(如果需要的话)
  {
    "operation": "remove",
    "spec": {
      "*": {
        "Tagscopy": ""
      }
    }
  }
]

操作解释

  • modify-overwrite-beta阶段:
    遍历每个数组元素里的Tagscopy项,先清理字符串首尾的多余引号,再把键值对按: 分割开,提取出单独的key和value,解决原数据里字符串带多余引号、转义符的问题。
  • shift阶段:
    保留所有原有字段(SourceId、Tags、ResourceName)的同时,把Tagscopy里解析好的键值对映射到顶层,用提取出的key作为字段名,value作为对应的值。这里的&3用来定位到最外层的数组元素索引,确保每个键值对都对应到正确的对象上。
  • remove阶段:
    把临时使用的Tagscopy字段移除,让最终输出更简洁。

测试效果

输入你的示例JSON后,会得到你期望的输出:

[
  {
    "SourceId": "/Apple/bb842437dd4/sourceGroups/ALPHABAT/providers/Mobile.com/phone/isp",
    "Tags": "Name\": \"OMapplication\",\"Owner\": \"Breily",
    "Name": "OMapplication",
    "Owner": "Breily",
    "ResourceName": "omapps"
  },
  {
    "SourceId": "/Apple/bb842437dd4/sourceGroups/ALPHABAT/providers/Mobile.com/phone/isp",
    "Tags": "mobile-source-usage\": \"apple-cloud",
    "mobile-source-usage": "apple-cloud",
    "ResourceName": "omapps"
  }
]

另外,这个规格也兼容Tags字段缺失的情况——如果某个对象里没有Tags或Tagscopy,转换过程不会报错,只会保留其他原有字段。

备注:内容来源于stack exchange,提问作者samrathal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:57:46