如何组织 JSON 数据以返回多个值

13次阅读

如何组织 JSON 数据以返回多个值

本文介绍如何为包含多风场的地区设计高效、可扩展的 json 数据结构,并提供 javascript 示例代码,帮助初学者轻松实现按地区查询多个风场信息。

在构建基于邮政编码查询本地风电场的工具时,数据往往不是“一地一风场”,而是“一地多风场”(如 Derbyshire Dales 包含两个社区能源项目)。此时,传统的单值键值对结构(如 {“Copeland”: {“haswindfarm”: “Yes”}})不再适用。我们需要一种既能保留地区名称作为主键、又能灵活承载多个风场及其属性的 jsON 组织方式。

✅ 推荐方案:地区为键,风场数组为值(简洁通用)

最清晰、易读且便于前端遍历的结构是将每个地区映射为一个对象,其 windfarms 字段为风场对象数组。每个风场对象可包含名称、容量、建成年份等任意扩展字段:

{   "Copeland": {     "windfarms": [       { "name": "Sustainable Keswick", "capacityMW": 12.5, "status": "operational" }     ]   },   "Crewe and Nantwich": {     "windfarms": [       { "name": "Nantwich Hydro", "capacityMW": 8.2, "status": "operational" }     ]   },   "Derbyshire Dales": {     "windfarms": [       { "name": "Matlock Community Energy Project", "capacityMW": 4.7, "status": "planned" },       { "name": "Derby Dales Community Energy", "capacityMW": 6.0, "status": "under-construction" }     ]   } }

优势

  • 语义明确(windfarms 是自然复数概念);
  • 支持统一遍历(无需动态键名);
  • 易于添加新风场(.push() 即可);
  • 兼容所有现代 API 工具与地图平台(如 Mapbox、Leaflet 的 Geojson 关联逻辑)。

? 如何在 javaScript 中安全访问与使用

假设你已通过 fetch() 获取 JSON 并解析为 data 对象:

// 示例:查询用户输入的地区(如 "Derbyshire Dales") const location = "Derbyshire Dales"; const region = data[location];  if (region && Array.isArray(region.windfarms) && region.windfarms.length > 0) {   console.log(`? ${location} 有 ${region.windfarms.length} 个风场:`);   region.windfarms.forEach((wf, index) => {     console.log(`  ${index + 1}. ${wf.name}(${wf.capacityMW} MW,${wf.status})`);   }); } else {   console.log(`❌ ${location} 暂无已登记风场。`); }

⚠️ 关键注意事项

  • 始终检查 data[location] 是否存在,避免 Cannot read Property ‘windfarms’ of undefined 错误;
  • 使用 Array.isArray() 验证 windfarms 字段类型,防止数据格式异常;
  • 地区名称若含空格或特殊字符(如 “Crewe and Nantwich”),确保前端传参时未被意外截断或转义;
  • 若需支持模糊匹配(如用户输错拼写),建议额外维护一个 aliases 映射表或引入轻量级模糊搜索库(如 Fuse.js)。

? 进阶建议:面向未来的结构优化

当数据规模扩大(如数百地区、上千风场)时,可进一步优化:

  • 扁平化 ID 引用:将风场独立为全局数组,地区仅存储 ID 列表,减少重复数据;
  • 增加地理坐标:在每个风场对象中加入 lat/lng,便于地图可视化;
  • 版本化与缓存:为 JSON 添加 “version”: “2024.1” 字段,并设置 http 缓存头,提升加载性能。

无论当前项目规模大小,采用“地区 → 风场数组”的结构都能兼顾可读性、可维护性与扩展性——这是 JSON 数据建模中「单一职责」与「自然语义」原则的典型实践。

text=ZqhQzanResources