You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart json_serializable序列化时将蛇形命名转为驼峰命名?

用json_serializable实现蛇形JSON到驼峰Dart类的序列化/反序列化

步骤1:配置依赖

在项目的pubspec.yaml里添加必要依赖:

dependencies:
  flutter:
    sdk: flutter
  json_annotation: ^4.8.1 # 版本号可根据实际情况调整

dev_dependencies:
  flutter_test:
    sdk: flutter
  build_runner: ^2.4.4
  json_serializable: ^6.7.0

执行dart pub get安装依赖。

步骤2:编写Person类

通过FieldRename.snake参数让json_serializable自动处理蛇形与驼峰的双向映射,类属性采用驼峰命名:

import 'package:json_annotation/json_annotation.dart';

part 'person.g.dart';

@JsonSerializable(fieldRename: FieldRename.snake)
class Person {
  final String firstName;
  final String lastName;

  Person({required this.firstName, required this.lastName});

  // 从JSON反序列化(蛇形转驼峰)
  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);

  // 序列化为JSON(驼峰转蛇形)
  Map<String, dynamic> toJson() => _$PersonToJson(this);
}

步骤3:生成序列化代码

在终端执行命令生成对应的.g.dart文件:

dart run build_runner build

示例验证

假设你的person.json内容是:

{
  "first_name": "John",
  "last_name": "Doe"
}

使用时可以这样操作:

// 从JSON文件读取并反序列化
final jsonString = await rootBundle.loadString('assets/person.json');
final jsonMap = jsonDecode(jsonString);
final person = Person.fromJson(jsonMap);
print(person.firstName); // 输出 John

// 将Person对象序列化为蛇形JSON
final serializedJson = person.toJson();
print(serializedJson); // 输出 {"first_name":"John","last_name":"Doe"}

核心逻辑就是@JsonSerializable(fieldRename: FieldRename.snake)这个配置,它会自动完成Dart类驼峰属性与JSON蛇形字段的双向映射,无需手动为每个字段添加@JsonKey注解。

内容的提问来源于stack exchange,提问作者s-hunter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 23:36:23