当前位置: 首页 > 知识库问答 >
问题:

是否可以在flutt/Dart中解析缺少属性的json?

冯胤
2023-03-14

我有来自API的json形式的对象列表。这些对象有一些属性,问题是一些对象缺少属性。那么如何无错误地解析其他属性的数据呢?

例如,我有这个缺少paymentType的属性

"user":{
"id": 6,
"name": "User",
"email": "",
"phone": "123",
"credit": null,
"fireBaseId": null,
"created_at": "2021-10-28T10:28:34.000000Z",
"updated_at": "2021-10-29T22:10:09.000000Z"
},
"paymentType": null,
"booking_type":{
"id": 1,
"name": "Mobile",
"price": 0,
"created_at": null,
"updated_at": null
}

但这所有属性都存在:

"user":{
"id": 6,
"name": "User",
"email": "",
"phone": "",
"credit": null,
"fireBaseId": null,
"created_at": "2021-10-28T10:28:34.000000Z",
"updated_at": "2021-10-29T22:10:09.000000Z"
},
"paymentType":{
"id": 1,
"name": "Cash",
"active": 1,
"created_at": "2021-10-29T00:36:06.000000Z",
"updated_at": "2021-10-29T17:24:42.000000Z"
},
"booking_type":{
"id": 2,
"name": "Parking",
"price": 10,
"created_at": null,
"updated_at": null
}

共有2个答案

上官和韵
2023-03-14

您可以为paymentType创建特殊对象类。试试看。

创建payment.dart

class PaymentType {
  int id;
  String name;      
  int active;
  DateTime createdAt;
  DateTime updatedAt;

  PaymentType({
    this.id,
    this.name,
    this.active,
    this.createdAt,
    this.updatedAt,
  }) ;

  factory PaymentType.fromJson(Map<String, dynamic> json) =>PaymentType(
        id: json["id"],
        name: json["name"],
        active: json["active"],
        createdAt: DateTime.parse(json["created_at"]),
        updatedAt: DateTime.parse(json["updated_at"]),
      );
}

并在解析时这样使用它:

......
"paymentType" : json["payment_type"] != null ? PaymentType.fromJson(json["payment_type"]) : null;
......

如果您有任何疑问,请随意:)

井宪
2023-03-14

如果您觉得某些属性可能为null,请为其添加null安全性,然后使用If()条件解析映射到对象属性的值。

这是一种可能的方法。它可能不是理想的方法,但它很有效!

class User {
  int? id;
  String? user;
  String? email;
  String? phone;
  String? credit;

  User.fromMap(Map<String, dynamic> map) {
    if (map.containsKey('id')) {
      this.id = int.parse(map['id']);
    }
    if (map.containsKey('user')) {
      this.user = "${map['user']}";
    }
    if (map.containsKey('email')) {
      this.email = "${map['email']}";
    }
    if (map.containsKey('phone')) {
      this.phone = "${map['phone']}";
    }
    if (map.containsKey('credit')) {
      this.credit = "${map['credit']}";
    }
  }
}
 类似资料:
  • 我有来自API的json形式的对象列表。这些对象有一些属性,问题是一些对象缺少属性。我的问题是:是否可以用颤振/飞镖分析这些数据?或者我必须更改为API响应,这样就不会缺少任何属性。 JSON数据:

  • 我有一个来自API的xml。 当我尝试使用simplexml\u load\u字符串或simplexmlement进行解析时,我得到了这个结果。 [广告]= 重要的是缺少我需要的url visibleurl属性。我试着在网上找,浪费了一整天来解决这个问题,但没有答案。有人能纠正我正在做的错误吗? PHP代码:

  • 问题内容: 如果我有发言权,。 当然,分配新的属性没有问题, 但是之后我想将其删除,因此这里无济于事。 所以, 是这样的。但是,还有一种更“优雅”的方式吗? 问题答案: 这适用于数组元素,变量和对象属性。 例:

  • 这是我的。工作文件 作业失败,出现以下错误: 我用的是Azkaban 2.5和cdh5

  • 问题内容: 是否可以在Java属性文件的下一行继续长字符串? 例如,以某种方式 当我得到它时,它将返回“ Hello World”? 问题答案: 行尾的反斜杠使您可以跨越多行,而以行开头的空格将被忽略: 在Java文档这样说: 逻辑行包含一个键元对的所有数据,这些数据可以通过用反斜杠字符将行终止符序列转义而分布在几条相邻的自然线上。

  • 问题内容: C#具有用于声明和使用属性的语法。例如,可以声明一个简单的属性,如下所示: 也可以在属性中添加一些逻辑,如下所示: 无论是否具有逻辑,属性的使用方式与字段相同: 我对Java或C#都不陌生-我已经使用了很多东西,而且我总是想念Java中使用属性语法。我在这个问题中读到“在Java7中或将来几乎不可能添加属性支持”,但是坦率地说,我发现在讨论,论坛,博客,评论和JSR中需要挖掘太多的工作