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

Flutter中解析存在可选null字段的API返回JSON数据问题咨询

字段可选空的JSON解析方案

核心处理逻辑:把question字段定义为可空类型即可,主流JSON解析框架会自动适配null值和非空对象的转换,不需要额外做复杂的自定义解析逻辑。

以下是不同常用技术栈的实现示例:

1. Kotlin(Gson/Jackson/Moshi通用)

// 定义Question内部结构
data class Question(
    val id: String,
    val category: String,
    val text: String
)

// 定义Video内部结构
data class Video(
    val id: String,
    val url: String,
    val thumbnail: String,
    val duration: Long
)

// 定义列表条目外层结构,question加?标记为可空
data class ListItem(
    val type: String,
    val video: Video,
    val question: Question? 
)

直接按List<ListItem>类型解析JSON即可,业务逻辑使用前判断question是否为null再处理即可。


2. Java(Jackson示例)

// Question内部类
public class Question {
    private String id;
    private String category;
    private String text;
    // 省略getter、setter、无参构造方法
}

// Video内部类
public class Video {
    private String id;
    private String url;
    private String thumbnail;
    private Long duration;
    // 省略getter、setter、无参构造方法
}

// 外层条目类,Java引用类型默认支持null,无需额外标记
public class ListItem {
    private String type;
    private Video video;
    private Question question;
    // 省略getter、setter、无参构造方法
}

解析代码示例:

ObjectMapper objectMapper = new ObjectMapper();
List<ListItem> resultList = objectMapper.readValue(jsonStr, new TypeReference<List<ListItem>>(){});

3. Python(Pydantic v2示例)

from pydantic import BaseModel
from typing import Optional, List

class Question(BaseModel):
    id: str
    category: str
    text: str

class Video(BaseModel):
    id: str
    url: str
    thumbnail: str
    duration: int

class ListItem(BaseModel):
    type: str
    video: Video
    question: Optional[Question] # Optional标记为可空

# 解析逻辑
result_list: List[ListItem] = [ListItem(**item) for item in origin_json_list]

注意事项

  • 不要将question定义为非空类型,否则解析到首条null值时会直接抛出序列化失败异常
  • 业务代码使用question字段前先做非空判断,避免空指针/属性不存在异常
  • 如果业务需要首条question有默认值,可以在序列化框架中配置null值自动填充规则,比如Jackson的@JsonSetter(nulls = Nulls.SKIP)、Pydantic的default=默认值配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:57:00