我有一个服务返回一个 json 数组,该数组解析并映射到我创建的对象的列表中。问题是我有一个名为“productName”的键,当它不包含值时,它不会随 json 响应一起返回。我想要做的是解析 json 数组,并针对数组中的每个项目测试键是否存在,如果存在,我应该返回键的值,如果不存在,我将默认值返回到字段 ProductName I已在我的模型中创建。
这是我的服务:
Future<List<Qrqc>?> fetchMyQrqc(
{required String baseUrl, required String id}) async {
try {
http.Response response = await http.get(
Uri.parse(
"https://demo.app.deepnrise.com/api-qrqc/qrqc/v1/qrqc/myqrqc/?userId=b0862e0e-ffe7-48c5-8f3c-3307b7f0671e&page=1&pageSize=1000000"),
headers: {HttpHeaders.contentTypeHeader: 'application/json'},
);
if (response.statusCode == 200) {
var codeUnits = response.body.codeUnits;
var responseParsed = const Utf8Decoder().convert(codeUnits);
List<Qrqc> myQRQC = (json.decode(responseParsed) as List)
.map((data) => Qrqc.fromJson(data))
.toList();
debugPrint("List Qrqc fetched with success");
return myQRQC;
} else {
throw Exception('Failed to load qrqc');
}
} catch (ex) {
debugPrint(ex.toString());
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的模型:
import 'dart:convert';
Qrqc qrqc(String str) => Qrqc.fromJson(json.decode(str));
class Qrqc {
// ignore: non_constant_identifier_names
Qrqc(
{required this.id,
this.title,
this.progress,
this.status,
this.role,
this.createdAt,
this.perimeterName,
this.typeID, this.productName});
// ignore: non_constant_identifier_names
int id;
String? title;
int? progress;
String? role;
String? status;
String? typeID;
String? createdAt;
String? perimeterName;
String? productName;
String? typeName;
factory Qrqc.fromJson(Map<String, dynamic> json) {
return Qrqc(
id: json['id'],
progress: json["progress"],
role: json["role"],
status: json["status"],
title: json["title"],
createdAt: json["detectedAt"],
perimeterName: json["perimeterName"],
typeID: json["typeID"],
productName: json["productName"],
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = id;
data['progress'] = progress;
data['role'] = role;
data['status'] = status;
data['perimeterName'] = perimeterName;
data['detectedAt'] = createdAt;
data['typeID'] = title;
data['productName'] = productName;
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
目前,该服务返回 null 异常,因为正如我所说,json 数组中的某些项目包含密钥,而其他项目则不包含。我希望能够将该字段保留在我的模型中,解析 json 数组并测试每个项目是否包含该键。我知道 dart containsKey 中有一个方法,但我不知道在哪里或如何在 json 数组上使用它,而不是简单的 json 模型。如果有人可以帮助我,我将不胜感激。
小智 5
您可以使用??带有默认值的运算符对 json 字段进行简单的 null 检查。使用它就像
productName: json["productName"] ?? 'Default Product Name';
Run Code Online (Sandbox Code Playgroud)
Default Product Name如果 JSON 字段为 null,则应自动设置默认值。
它本质上是一个简写
productName: json["productName"] != null ? json["productName"] : 'Default Product Name';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3313 次 |
| 最近记录: |