Dart使用json_serializable解析json映射,但使用键



假设我有以下json(结构为<字符串键,映射值>(:

{
'A1': {'name': 'a'},
'B2': {'name': 'b'}
}

并且我想要使用fromJson工厂方法将其解析为这个类(注意我使用密钥作为该用户的id(,该方法接受两个参数:

Class User {
final String id;
final String name;
factory User.fromJson(Map<String, dynamic> json, String key) {
return User(
id: key,
name: json['name'],
);
}
}

我可以使用json_serializable实现它吗?

此工厂方法所期望的json映射只是您正在解析的顶级JSON对象的值。

您所需要做的就是解析JSON,提取所有键,然后将值传递给工厂方法。

类似这样的东西:

import 'dart:convert';
const json = '''
{
"A1": {"name": "a"},
"B2": {"name": "b"}
}
''';
class User {
final String id;
final String name;
User({required this.id, required this.name});
factory User.fromJson(Map<String, dynamic> json, String key) {
return User(
id: key,
name: json['name'],
);
}
@override
String toString() => 'User(id=$id, name=$name)';
}
main() {
final map = jsonDecode(json);
map.forEach((id, userJson) {
final user = User.fromJson(userJson, id);
print(user);
});
}

打印:

User(id=A1, name=a)
User(id=B2, name=b)

现在,要使用json_serializable,只需对其进行注释,并用生成的实现替换您的实现。。。

@JsonSerializable()
class User {
...
factory User.fromJson(Map<String, dynamic> json, String key) =>
// pass in only the relevant json Map!
_$UserFromJson(json[key]);
}

相关内容

  • 没有找到相关文章

最新更新