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

如何为含动态日期键的近地天体JSON创建Kotlin Data Class

如何为带动态日期键的JSON创建Kotlin数据类?

首先看你提供的JSON结构:

{
    "element_count": 25,
    "near_earth_objects": {
        "2015-09-08": [{
                "id": "2465633",
                "neo_reference_id": "2465633",
                "name": "465633 (2009 JR5)",
                "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=2465633",
                "absolute_magnitude_h": 20.36,
                "estimated_diameter": {
                    ...
                },
                "is_potentially_hazardous_asteroid": true,
                "close_approach_data": [{
                    "close_approach_date": "2015-09-08",
                    "close_approach_date_full": "2015-Sep-08 20:28",
                    "epoch_date_close_approach": 1441744080000,
                    "relative_velocity": {
                        ...
                    },
                    "miss_distance": {
                    ...
                    },
                    "orbiting_body": "Earth"
                }],
                "is_sentry_object": false
            }  
        ],
        "2015-09-07": [{
                "id": "2440012",
                "neo_reference_id": "2440012",
                "name": "440012 (2002 LE27)",
                "nasa_jpl_url": "http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=2440012",
                "absolute_magnitude_h": 19.3,
                "estimated_diameter": {
                    
                },
                "is_potentially_hazardous_asteroid": false,
                "close_approach_data": [{
                    "close_approach_date": "2015-09-07",
                    "miss_distance": {
                        
                    },
                    "orbiting_body": "Earth"
                }],
                "is_sentry_object": false
            }
            
        ]
    }
}

核心解决方案:用Map处理动态键

near_earth_objects里的键是动态日期字符串,对应的值是近地天体列表,在Kotlin中直接用Map<String, List<NearEarthObject>>定义这个字段即可,主流JSON解析库(Gson、Moshi、Jackson)都支持这种类型的自动解析。

完整数据类定义

// 顶层响应类
data class NeoResponse(
    val element_count: Int,
    val near_earth_objects: Map<String, List<NearEarthObject>>
)

// 近地天体类
data class NearEarthObject(
    val id: String,
    val neo_reference_id: String,
    val name: String,
    val nasa_jpl_url: String,
    val absolute_magnitude_h: Double,
    val estimated_diameter: EstimatedDiameter,
    val is_potentially_hazardous_asteroid: Boolean,
    val close_approach_data: List<CloseApproachData>,
    val is_sentry_object: Boolean
)

// 直径数据类(根据实际JSON字段补全)
data class EstimatedDiameter(
    val kilometers: DiameterValue,
    val meters: DiameterValue,
    val miles: DiameterValue,
    val feet: DiameterValue
)

data class DiameterValue(
    val estimated_diameter_min: Double,
    val estimated_diameter_max: Double
)

// 近距离接近数据类
data class CloseApproachData(
    val close_approach_date: String,
    val close_approach_date_full: String?, // 可选字段,根据实际是否为空调整
    val epoch_date_close_approach: Long?,
    val relative_velocity: RelativeVelocity,
    val miss_distance: MissDistance,
    val orbiting_body: String
)

// 相对速度数据类
data class RelativeVelocity(
    val kilometers_per_second: String,
    val kilometers_per_hour: String,
    val miles_per_hour: String
)

// 距离数据类
data class MissDistance(
    val astronomical: String,
    val lunar: String,
    val kilometers: String,
    val miles: String
)

如何获取动态日期和对应数据

解析完成后,通过遍历near_earth_objects的条目就能获取所有日期和对应的天体列表:

val response: NeoResponse = // 解析后的响应对象
// 遍历所有日期和天体列表
for ((date, neoList) in response.near_earth_objects) {
    println("日期:$date")
    neoList.forEach { neo ->
        println("天体名称:${neo.name},是否危险:${neo.is_potentially_hazardous_asteroid}")
    }
}

// 获取所有日期集合
val allDates = response.near_earth_objects.keys
// 获取指定日期的天体列表
val targetDateNeoList = response.near_earth_objects["2015-09-08"]

注意事项

  • 字段的可空性(?)根据实际JSON返回情况调整,若某些字段可能缺失,就标记为可空类型。
  • 使用Gson需添加Kotlin支持依赖;使用Moshi需添加moshi-kotlin依赖,确保数据类解析顺畅。

内容的提问来源于stack exchange,提问作者Saneen K P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:55:17