json - 如何在 Flutter/Dart 中获取 json 数组
问题描述
我只想从数组数据中获取所有“名称”的数据。
我想print(data['data']['name']);
但它返回此错误:
未处理的异常:类型'String'不是'index'类型'int'的子类型
但是当我print(data['data']);
,它会从“数据”返回所有数据:
"data": [
{
"created_at": "2020-03-16 16:10:51",
"deleted_at": null,
"id": 2,
"is_active": 1,
"name": "Maybank",
"updated_at": "2020-03-16 16:18:06"
},
{
"created_at": "2020-03-16 16:27:37",
......
],
调用 API 代码
displayBanks(BuildContext context) async {
_callApi.refreshTokenApi(context);
var _addressUrl = '$_hostUrl/banks'; //API URL
final SharedPreferences prefs = await SharedPreferences.getInstance();
_accessToken = prefs.getString('access_token');
Response _response = await get(_addressUrl, headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $_accessToken'
});
var data;
data = jsonDecode(_response.body);
if (_response.statusCode == 200) {
print(data['data']['name']);
return data;
}
else {
print(_response.statusCode);
}
}
来自 API URL 的 JSON 数据示例:
{
"data": [
{
"created_at": "2020-03-16 16:10:51",
"deleted_at": null,
"id": 2,
"is_active": 1,
"name": "Maybank",
"updated_at": "2020-03-16 16:18:06"
},
{
"created_at": "2020-03-16 16:27:37",
"deleted_at": null,
"id": 3,
"is_active": 1,
"name": "India International Bank (Malaysia) Berhad",
"updated_at": "2020-03-16 16:27:37"
},
{
"created_at": "2020-03-16 16:27:37",
"deleted_at": null,
"id": 4,
"is_active": 1,
"name": "National Bank of Abu Dhabi Malaysia Berhad",
"updated_at": "2020-03-16 16:27:37"
}
],
"links": {
"first": "https://demo.local/api/banks?page=1",
"last": "https://demo.local/api/banks?page=1",
"next": null,
"prev": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"path": "https://demo.local/api/banks",
"per_page": 5,
"to": 3,
"total": 3
}
}
解决方案
未处理的异常:“String”类型不是“index”的“int”类型的子类型
异常消息清楚地解释了该问题。
属性“名称”位于一个对象内部,该对象本身放置在一个数组中。所以你首先解码数组。然后使用索引 (0..n) 访问每个对象,然后从每个对象中,您可以读取“名称”属性。
干得好
class MyData {
final List<Data> data;
MyData({this.data});
factory MyData.fromJson(Map<String, dynamic> json) {
return MyData(
data: json['data'] != null ? (json['data'] as List).map((i) => Data.fromJson(i)).toList() : null,
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.data != null) {
data['data'] = this.data.map((v) => v.toJson()).toList();
}
return data;
}
}
class Data {
final String created_at;
final String deleted_at;
final int id;
final int is_active;
final String name;
final String updated_at;
Data({this.created_at, this.deleted_at, this.id, this.is_active, this.name, this.updated_at});
factory Data.fromJson(Map<String, dynamic> json) {
return Data(
created_at: json['created_at'],
deleted_at: json['deleted_at'],
id: json['id'],
is_active: json['is_active'],
name: json['name'],
updated_at: json['updated_at'],
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['created_at'] = this.created_at;
data['id'] = this.id;
data['is_active'] = this.is_active;
data['name'] = this.name;
data['updated_at'] = this.updated_at;
data['deleted_at'] = this.deleted_at;
return data;
}
}
推荐阅读
- go - cmd.Run() 返回“文件不存在”错误
- excel - VBA_多个公共或全局变量以一种简单的方式
- php - 我的网站自动发送 ajax 请求同一页面
- python - 有条件地为路由设置 FastAPI 响应模型
- react-native - 使用 Cloud Storage 和自定义域部署应用程序时出现空白页面
- python-3.x - 如何将 TensorFlow 1.1x 检查点权重加载到 TF2.2 LSTM 层中 - 结果不同(Python、Keras)
- python - QTextEdit 默认值
- android - Android 浏览器 kiwi : //extensions - 开发者模式无法识别加载 .zip 文件
- python - 为什么我在使用 LightGBM 和 Sklearn 完成多分类任务时得到“Python int too large to convert to C long”?
- javascript - const 变量可以在 while 循环中重新声明,即使它应该是常量