【问题标题】:Exception: type 'String' is not a subtype of type 'Map<String, dynamic>例外:“String”类型不是“Map<String, dynamic>”类型的子类型
【发布时间】:2020-06-24 04:03:51
【问题描述】:

例外:“String”类型不是“Map”类型的子类型

{"collection":{"data":"{\"id\": 1, \"name\": \"Marko\", \"picture\": 
\"https://lh3.googleusercontent.com/a-/AAuE7mC1vqaKk_Eylt-fcKgJxuN96yQ7dsd2dBdsdsViK959TKsHQ=s96- 
c\"}","statusCode":202,"version":"1.0"}}

这是上面的 json,我只想把它放在 User pojo 类中的 [data]。

但它抛出了上述异常类型。

class UserCollection {
  final User data;
  final int statusCode;
  final String version;

 UserCollection({this.data, this.statusCode, this.version});

factory UserCollection.fromJson(Map<String, dynamic> json) {
 return UserCollection(
    statusCode: json['statusCode'] as int,
    data: User.fromJson(json['data']) ,
    version: json['version'] as String );
}

 Map<String, dynamic> toJson() {
 final Map<String, dynamic> data = new Map<String, dynamic>();
 data['data'] = this.data;
 data['statusCode'] = this.statusCode;
 data['version'] = this.version;
 return data;
 }
}

用户 Pojo 类

@JsonSerializable()
class User {
final int id;
 final String sub;
 final String home;
 final String work;
 final String name;
 final String mobileNo;
 final String email;
 final String favMechId;
 final String appVersionCode;
 final String picture;
 final String serverTime;
 final String dateCreated;
 final String dateModified;
 final String fcmTokenId;

 User(
  {this.id,
  this.sub,
  this.home,
  this.work,
  this.name,
  this.mobileNo,
  this.email,
  this.favMechId,
  this.appVersionCode,
  this.picture,
  this.serverTime,
  this.dateCreated,
  this.dateModified,
  this.fcmTokenId});



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

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

为了清楚起见,我参考了这个中型网站,medium flutter json

但静脉超过 4 小时,我不知道出了什么问题。 如果将 User.from() 更改为 String 则没关系。但我需要将 [data] 从 json 解析为 User pojo 类。

【问题讨论】:

  • 你可以在这里上传你的 JSON 响应吗?
  • 我没听懂。 Java中的POJO,不就是dart中的PODO吗?这是我到处读到的。

标签: json flutter


【解决方案1】:

试试下面,

factory UserCollection.fromJson(Map<String, dynamic> json) {
 return UserCollection(
    statusCode: json['statusCode'] as int,
    data: User.fromJson(json.decode(json['data'])),
    version: json['version'] as String );
}

更改data: User.fromJson(json.decode(json['data'])),

【讨论】:

    猜你喜欢
    • 2021-06-28
    • 2022-08-12
    • 2023-04-02
    • 2021-10-06
    • 2018-12-14
    • 2021-10-25
    • 2020-07-03
    • 2019-12-05
    • 2023-03-11
    相关资源
    最近更新 更多