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

请求编写脚本拆分JSON中downloadSpeed的数值与度量单位

实现JSON中downloadSpeed字段的数值与单位拆分

JavaScript 实现

function transformDownloadSpeed(payload) {
  // 深拷贝原数据,避免修改原始对象
  const result = JSON.parse(JSON.stringify(payload));
  
  // 定位到name为downloadSpeed的productCharacter项
  const targetItem = result.productCharacters?.find(item => item.name === 'downloadSpeed');
  
  if (targetItem?.value) {
    // 处理每个value子项,拆分数值与单位
    targetItem.value = targetItem.value.map(item => {
      // 匹配整数/小数数值 + 空白 + 单位的正则
      const matchResult = item.value.match(/^(\d+(\.\d+)?)\s*(\w+)$/);
      if (matchResult) {
        return {
          ...item,
          value: Number(matchResult[1]),
          umo: matchResult[3]
        };
      }
      // 匹配失败时返回原项,保证兼容性
      return item;
    });
  }
  
  return result;
}

// 示例调用
const originalData = {
  "productCharacters": [
    {
      "name": "downloadSpeed",
      "value": [
        {"value": "100 Mbps"},
        {"value": "50.5 Mbps"},
        {"value": "10 Gbps", "otherField": "test"}
      ]
    },
    {
      "name": "uploadSpeed",
      "value": [{"value": "50 Mbps"}]
    }
  ]
};

const transformedData = transformDownloadSpeed(originalData);
console.log(JSON.stringify(transformedData, null, 2));

Python 实现

import re
import json

def transform_download_speed(payload):
    # 深拷贝原数据
    result = json.loads(json.dumps(payload))
    
    # 查找目标项
    target_item = next(
        (item for item in result.get('productCharacters', []) if item.get('name') == 'downloadSpeed'),
        None
    )
    
    if target_item and 'value' in target_item:
        transformed_values = []
        for item in target_item['value']:
            match = re.match(r'^(\d+(\.\d+)?)\s*(\w+)$', item.get('value', ''))
            if match:
                new_item = item.copy()
                new_item['value'] = float(match.group(1))
                new_item['umo'] = match.group(3)
                transformed_values.append(new_item)
            else:
                transformed_values.append(item)
        target_item['value'] = transformed_values
    
    return result

# 示例调用
original_data = {
    "productCharacters": [
        {
            "name": "downloadSpeed",
            "value": [
                {"value": "100 Mbps"},
                {"value": "50.5 Mbps"}
            ]
        },
        {
            "name": "uploadSpeed",
            "value": [{"value": "50 Mbps"}]
        }
    ]
}

transformed_data = transform_download_speed(original_data)
print(json.dumps(transformed_data, indent=2))

关键说明

  • 采用深拷贝处理原数据,避免修改原始JSON结构
  • 使用正则表达式匹配数值(支持整数和小数)与单位,兼容常见的网速格式
  • 保留原字段的其他属性,保证数据完整性
  • 匹配失败时返回原项,避免破坏原有数据结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:26:28