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

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

相关推荐
iFlyCai11 小时前
Flutter三棵树核心详解之Widget树完全解析(一)
flutter
deli00700715 小时前
JSON 树形查看器:粘贴即解析,折叠展开一目了然
前端·数据库·json·ai编程
GitLqr16 小时前
Flutter 实战:如何轻松实现图片与视频保存到手机相册
flutter·全栈·dart
大龄秃头程序员16 小时前
【小记】第一次全栈踩坑 WebSocket 404
flutter
lv__pf17 小时前
ajax的使用、json、jquery
ajax·json·jquery
大龄秃头程序员21 小时前
Dart/Flutter StatefulWidget 生命周期 + ChangeNotifier Listener 泄漏的经典坑。
flutter
大龄秃头程序员1 天前
Flutter踩坑记-WebSocket 通知挤占事件循环
flutter
问君能有几多愁~1 天前
Qt Json 序列化操作
开发语言·qt·json
恋猫de小郭1 天前
Gradle 9.7.0 将提速 Android 构建,Sync 提升接近一倍
android·前端·flutter
iFlyCai1 天前
Flutter三棵树核心详解之Widget树完全解析(二)
flutter·statelesswidget