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

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

相关推荐
liliangcsdn3 小时前
OpenAI 如何自定义JSON结构化输出示例
人工智能·json
csdn2015_3 小时前
java 把对象转化为json字符串
java·前端·json
咖啡虫4 小时前
Hookify 完全使用指南:用对话生成 Claude Code 钩子,告别手写 JSON
自动化·json·效率工具·hooks·ai 编程·claude code·hookify
season_zhu5 小时前
聊聊我最近都干了些什么,AI 时代的手动撸码人
flutter·ios·ai编程
2501_915106326 小时前
Flutter 开发工具有哪些 跨平台项目开发与上架实操指南
android·flutter·ios·小程序·uni-app·iphone·webview
吃不胖爹6 小时前
flutter项目如何打包,创建签名与配置签名
javascript·flutter·架构
weixin_443478516 小时前
Flutter学习之输入组件
学习·flutter·servlet
吃不胖爹6 小时前
Flutter 基本架构与使用
javascript·flutter·架构
曦月合一6 小时前
访问服务器json接口,将json字符串解析成json格式的demo
运维·服务器·json
MakeZero21 小时前
Flutter那些事-GridView
flutter·dart