Flutter json_serializable 如果键可以有不同的名称怎么办

Posted

技术标签:

【中文标题】Flutter json_serializable 如果键可以有不同的名称怎么办【英文标题】:Flutter json_serializable what if key can have different names 【发布时间】:2022-01-13 12:11:54 【问题描述】:

我在 Flutter 中使用 json_serializable 将类存储在文件中并从中读取。为简单起见,我没有在此处发布原始类,但原则是在编写应用程序的中途我决定将变量名称“aStupidName”更改为“name”。我如何建议代码生成实用程序将带有键“aStupidName”的 JSON 值(如果它存在于 JSON 中)分配给变量“name”,但如果存在键“name”以将其分配给变量,即在较新版本的文件中?

【问题讨论】:

【参考方案1】:

嘿,我认为您可以为模型中的同一字段提供多个 json 键注释。

@JsonSerializable()
class Person 

  @JsonKey(name: 'name') 
  @JsonKey(name:'first_name')
  final String firstName, lastName;

  final DateTime? dateOfBirth;

  Person(required this.firstName, required this.lastName, this.dateOfBirth);

  factory Person.fromJson(Map<String, dynamic> json) => _$PersonFromJson(json);

  Map<String, dynamic> toJson() => _$PersonToJson(this);

或者你可以给 json 键注解一个显式的 fromJson 参数一个函数来完全控制这个字段如何被反序列化

【讨论】:

【参考方案2】:

您可以只修改文件并替换旧的对象名称。 例如,您可以使用 sed 来完成

sed -i 's/OLD_TERM/NEW_TERM/g' file

【讨论】:

以上是关于Flutter json_serializable 如果键可以有不同的名称怎么办的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:使用 json_serializable 将 json 转换为模型时出现问题

在flutter中使用json_serializable对json对象进行反序列化

Flutter - json_serializable fromJson:在 null 上调用了方法“[]”

如何编写像json_serializable这样的flutter构建器

Flutter json_serializable 如果键可以有不同的名称怎么办

尝试使用 json_serializable 包运行 android 模拟器时出现 Flutter 编译错误