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

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

相关推荐
落叶飘飘s4 小时前
餐饮服务与软件创新的融合:解析海底捞 APP 的 Flutter 鸿蒙开发之路
flutter·华为·harmonyos
起司喵喵8 小时前
Flutter-MacOS桌面OS系统|flutter.+window_manager客户端OS模板
flutter·macos·策略模式
红叶舞8 小时前
成数据绑定对象,在应用程序中处理完数据后,将更新的数据序列化为JSON传回远端服务器,很多移动应用使用了这种模式处理服务器端的数据。 ...
运维·服务器·json
Wuxiaoming13518 小时前
flutter app的logo和splash logo尺寸
flutter
GitLqr21 小时前
深入理解 Flutter 架构:从 Widget 到 GPU 像素的全链路解析
flutter·面试·dart
SoaringHeart1 天前
Flutter进阶|最佳实践:组件内阴影实现
前端·flutter
玛艾露贝1 天前
Supabase云同步架构:Flutter应用的数据同步策略
flutter·架构
name好难取诶1 天前
解析请求体内容(如 JSON、表单数据、XML 等) 将原始数据转换为 Python 数据结构 使转换后的数据可在 request. ...
xml·python·json
gcw10241 天前
JSONMe 简觅JSON 工具
json·json格式化·json可视化·json美化·json校验·好用的json工具·json编辑
北北牌屈四巴格!1 天前
whistle自定义修改接口返回值内容
前端·json