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),需确保业务逻辑能处理这种情况。

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

相关推荐
程序员老刘19 小时前
一杯奶茶钱,PicGo + 阿里云 OSS 搭建永久稳定的个人图床
flutter·markdown
奋斗的小青年!!1 天前
OpenHarmony Flutter 拖拽排序组件性能优化与跨平台适配指南
flutter·harmonyos·鸿蒙
小雨下雨的雨1 天前
Flutter 框架跨平台鸿蒙开发 —— Stack 控件之三维层叠艺术
flutter·华为·harmonyos
全栈前端老曹1 天前
【包管理】npm init 项目名后底层发生了什么的完整逻辑
前端·javascript·npm·node.js·json·包管理·底层原理
黄金贼贼1 天前
2026最新java单元测试json校验器
java·单元测试·json
行者961 天前
OpenHarmony平台Flutter手风琴菜单组件的跨平台适配实践
flutter·harmonyos·鸿蒙
小雨下雨的雨1 天前
Flutter 框架跨平台鸿蒙开发 —— Flex 控件之响应式弹性布局
flutter·ui·华为·harmonyos·鸿蒙系统
cn_mengbei1 天前
Flutter for OpenHarmony 实战:CheckboxListTile 复选框列表项详解
flutter
cn_mengbei1 天前
Flutter for OpenHarmony 实战:Switch 开关按钮详解
flutter
奋斗的小青年!!1 天前
OpenHarmony Flutter实战:打造高性能订单确认流程步骤条
flutter·harmonyos·鸿蒙