在 Flutter 中使用条件将数据解析为两个单独的列表
Parse data to two separate lists with condition in Flutter
[
{
"name": "ITEM-1",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-2",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-3",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-4",
"desc": "DESCRIPTION",
"listNo" :"1"
},
{
"name": "ITEM-5",
"desc": "DESCRIPTION",
"listNo" :"1"
},
{
"name": "ITEM-6",
"desc": "DESCRIPTION",
"listNo" :"1"
}
]
如何在futter中实现这个模型?我想显示上面 JSON 中所示的两个列表和数据。
LIST-A 的条件是“listNo”="0",LIST-B 的条件是"listNo"="1"。
有多种方法可以做到这一点,但我认为最容易理解的解决方案是执行以下操作:
import 'dart:convert';
void main() {
const input = '''
[
{
"name": "ITEM-1",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-2",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-3",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-4",
"desc": "DESCRIPTION",
"listNo" :"1"
},
{
"name": "ITEM-5",
"desc": "DESCRIPTION",
"listNo" :"1"
},
{
"name": "ITEM-6",
"desc": "DESCRIPTION",
"listNo" :"1"
}
]
''';
final list1 = <Map<String, dynamic>>[];
final list2 = <Map<String, dynamic>>[];
for (final map in json.decode(input)) {
if (map['listNo'] == '0') {
list1.add(map as Map<String, dynamic>);
} else {
list2.add(map as Map<String, dynamic>);
}
}
print(list1);
// [{name: ITEM-1, desc: DESCRIPTION, listNo: 0}, {name: ITEM-2, desc: DESCRIPTION, listNo: 0}, {name: ITEM-3, desc: DESCRIPTION, listNo: 0}]
print(list2);
// [{name: ITEM-4, desc: DESCRIPTION, listNo: 1}, {name: ITEM-5, desc: DESCRIPTION, listNo: 1}, {name: ITEM-6, desc: DESCRIPTION, listNo: 1}]
}
如果您认为这样看起来更清楚,您还可以执行以下操作:
final parsedJson = json.decode(input) as List<dynamic>;
final list1 = [
...parsedJson
.cast<Map<String, dynamic>>()
.where((map) => map['listNo'] == '0')
];
final list2 = [
...parsedJson
.cast<Map<String, dynamic>>()
.where((map) => map['listNo'] == '1')
];
[
{
"name": "ITEM-1",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-2",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-3",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-4",
"desc": "DESCRIPTION",
"listNo" :"1"
},
{
"name": "ITEM-5",
"desc": "DESCRIPTION",
"listNo" :"1"
},
{
"name": "ITEM-6",
"desc": "DESCRIPTION",
"listNo" :"1"
}
]
如何在futter中实现这个模型?我想显示上面 JSON 中所示的两个列表和数据。 LIST-A 的条件是“listNo”="0",LIST-B 的条件是"listNo"="1"。
有多种方法可以做到这一点,但我认为最容易理解的解决方案是执行以下操作:
import 'dart:convert';
void main() {
const input = '''
[
{
"name": "ITEM-1",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-2",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-3",
"desc": "DESCRIPTION",
"listNo" :"0"
},
{
"name": "ITEM-4",
"desc": "DESCRIPTION",
"listNo" :"1"
},
{
"name": "ITEM-5",
"desc": "DESCRIPTION",
"listNo" :"1"
},
{
"name": "ITEM-6",
"desc": "DESCRIPTION",
"listNo" :"1"
}
]
''';
final list1 = <Map<String, dynamic>>[];
final list2 = <Map<String, dynamic>>[];
for (final map in json.decode(input)) {
if (map['listNo'] == '0') {
list1.add(map as Map<String, dynamic>);
} else {
list2.add(map as Map<String, dynamic>);
}
}
print(list1);
// [{name: ITEM-1, desc: DESCRIPTION, listNo: 0}, {name: ITEM-2, desc: DESCRIPTION, listNo: 0}, {name: ITEM-3, desc: DESCRIPTION, listNo: 0}]
print(list2);
// [{name: ITEM-4, desc: DESCRIPTION, listNo: 1}, {name: ITEM-5, desc: DESCRIPTION, listNo: 1}, {name: ITEM-6, desc: DESCRIPTION, listNo: 1}]
}
如果您认为这样看起来更清楚,您还可以执行以下操作:
final parsedJson = json.decode(input) as List<dynamic>;
final list1 = [
...parsedJson
.cast<Map<String, dynamic>>()
.where((map) => map['listNo'] == '0')
];
final list2 = [
...parsedJson
.cast<Map<String, dynamic>>()
.where((map) => map['listNo'] == '1')
];