Flutter 模型转JSON跳过零值/null

在 Flutter 开发中,如果你希望模型转 JSON 时跳过值为 0int 字段 (即不包含该字段),可以通过以下两种方法实现。这里以常用的 json_serializable 库为例:


方法一:使用 JsonKey 注解的 includeIfNull 和自定义 toJson

  1. 设置 includeIfNull: false :确保 null 值不被包含。
  2. 自定义 toJson 函数 :将 0 转换为 null,这样结合 includeIfNull: false 即可跳过。

dart

dart 复制代码
import 'package:json_annotation/json_annotation.dart';

part 'model.g.dart';

@JsonSerializable()
class MyModel {
  @JsonKey(
    includeIfNull: false,
    toJson: _valueToJson, // 自定义转换函数
  )
  final int? value;

  MyModel({this.value});

  factory MyModel.fromJson(Map<String, dynamic> json) =>
      _$MyModelFromJson(json);

  Map<String, dynamic> toJson() => _$MyModelToJson(this);

  // 自定义转换逻辑:0 返回 null,其他保持不变
  static dynamic _valueToJson(int? value) => value == 0 ? null : value;
}

方法二:手动重写 toJson 方法(不依赖代码生成)

如果你不想依赖代码生成,可以手动实现 toJson

dart

arduino 复制代码
class MyModel {
  final int? value;

  MyModel({this.value});

  Map<String, dynamic> toJson() {
    final map = <String, dynamic>{};
    // 仅当 value 非 0 且非 null 时才包含
    if (value != null && value != 0) {
      map['value'] = value;
    }
    return map;
  }
}

补充说明

  • 默认值处理 :如果字段为 null0,上述方法会跳过该字段。
  • 反序列化注意 :JSON 中缺少的字段在解析时会成为 null 或默认值(如 int 字段会是 0),需确保业务逻辑能处理这种情况。

根据你的序列化需求选择合适的方法即可。

相关推荐
程序员老刘8 小时前
跨平台开发地图 | 2026年9月
flutter·客户端
HouWan11 小时前
Flutter iOS UISceneDelegate 迁移指南:理清新的 Scene 生命周期
flutter·ios·app
数据狐(Datafox)12 小时前
1688商品列表API接口解析(附 JSON 样例)
java·开发语言·数据库·爬虫·json
技术任我行XTing14 小时前
【DFX系列】Flutter 鸿蒙应用外接纹理介绍及问题定位
flutter·harmonyos
恋猫de小郭16 小时前
Flutter GSoC 2026 提案进度解读,补上 DevTools、FFI 和原生平台的关键缺口
android·前端·flutter
j7~1 天前
【Linux网络加餐】(篇六)网络版计算器(上):模板方法模式、序列化与 JSON
linux·c++·json·序列化·反序列化·网络版计算机
●VON2 天前
Flutter 鸿蒙插件适配实战:用 flutter_native_timezone_2025 1.0.1 读取当前时区与系统目录
flutter·华为·harmonyos·鸿蒙
黑科技iOS上架2 天前
iOS深度混淆flutter应用的最佳实践
flutter·ios·混淆·审核·深度混淆
梦帮科技2 天前
Next.js 16 模块化单体实战:App Router、领域模块与 Route Handler 分层
css·数据结构·链表·正则表达式·node.js·json·html5