请求编写脚本拆分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
相关产品推荐
相关产品推荐

