本文介绍如何为包含多风场的地区设计高效、可扩展的 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" }
]
}
}✅ 优势:
假设你已通过 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} 暂无已登记风场。`);
}⚠️ 关键注意事项:
indfarms 字段类型,防止数据格式异常; 当数据规模扩大(如数百地区、上千风场)时,可进一步优化:
无论当前项目规模大小,采用“地区 → 风场数组”的结构都能兼顾可读性、可维护性与扩展性——这是 JSON 数据建模中「单一职责」与「自然语义」原则的典型实践。