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

如何解析JSON中嵌套数组(数组内数组)中的对象?

解析嵌套数组对象并生成列表(基于GeoJSON示例)

嘿,我明白你现在在处理嵌套数组里的对象解析,还要用两层循环生成列表对吧?刚好你给的USGS地震GeoJSON示例很典型,我来给你拆解下具体怎么实现~

先理清楚数据结构

你提供的JSON是标准的GeoJSON FeatureCollection 格式,核心数据都在features数组里——每个数组元素都是一个代表地震事件的Feature对象,里面包含了震级、地点等属性信息。如果要生成列表,我们需要先遍历外层的features数组,再根据需求遍历每个Feature内部的子数组(如果有的话)。

JavaScript实现示例

假设你已经把JSON解析成了可操作的JavaScript对象,这里给你写个具体的代码例子:

// 假设已经解析好的GeoJSON数据(补全了部分示例内容)
const quakeData = { 
  "type": "FeatureCollection", 
  "metadata": { 
    "generated": 1522105396000, 
    "title": "USGS Magnitude 4.5+ Earthquakes, Past Day", 
    "count": 7 
  }, 
  "features": [
    { 
      "type": "Feature", 
      "properties": { "mag": 4.6, "place": "10km NNW of Nago, Japan", "time": 1522098762000 },
      "geometry": { "type": "Point", "coordinates": [127.9133, 26.5472, 10] }
    },
    { 
      "type": "Feature", 
      "properties": { "mag": 5.1, "place": "25km SE of Kirakira, Solomon Islands", "time": 1522089231000 },
      "geometry": { "type": "Point", "coordinates": [162.2333, -10.6042, 40] }
    }
  ] 
};

// 获取页面上的列表容器(假设你有个id为quake-list的ul标签)
const listContainer = document.getElementById('quake-list');

// 第一层循环:遍历features数组里的每个地震Feature
quakeData.features.forEach(feature => {
  const earthquakeProps = feature.properties;
  
  // 如果你需要遍历Feature内部的子数组(比如假设properties里有个relatedEvents数组)
  // 这里就是第二层循环的位置:
  // earthquakeProps.relatedEvents?.forEach(event => {
  //   // 处理每个子对象,生成列表项
  // });
  
  // 先做基础版本:提取震级和地点生成列表项
  const listItem = document.createElement('li');
  listItem.textContent = `震级 ${earthquakeProps.mag} | 地点 ${earthquakeProps.place}`;
  listContainer.appendChild(listItem);
});

Python实现示例

如果是用Python处理,思路完全一致,代码如下:

import json

# 假设从文件读取了GeoJSON数据
with open('earthquake_data.json', 'r') as f:
    quake_data = json.load(f)

quake_list = []

# 第一层循环:遍历features数组
for feature in quake_data['features']:
    props = feature['properties']
    
    # 第二层循环:如果有子数组需要处理,比如props里的related_quakes
    # for related_quake in props.get('related_quakes', []):
    #     quake_list.append(f"关联地震:震级{related_quake['mag']},地点{related_quake['place']}")
    
    # 基础版本:提取核心信息存入列表
    quake_list.append(f"震级 {props['mag']} | 地点 {props['place']}")

# 打印生成的列表
for item in quake_list:
    print(item)

几个注意点

  • 一定要做存在性检查:比如先确认quakeData.features是数组再遍历,避免空指针报错,比如JavaScript里用quakeData?.features && Array.isArray(quakeData.features),Python里用if 'features' in quake_data and isinstance(quake_data['features'], list)。
  • 第二层循环的触发条件:只有当每个Feature内部确实有需要遍历的子数组时才用,如果只是提取单个对象的属性,一层循环就够啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:56:04