我是新來的。我正在嘗試從以下串列創建新串列
var itemlist1=[
{"p_id": "a101", "model": "M-Plaz","price": 2500},
{"p_id": "a101", "model": "Z-Plaz","price": 3500},
{"p_id": "a102", "model": "M-Neo", "price": 1560},
{"p_id": "a102", "model": "N-Neo1","price": 3600}];
輸出串列應如下所示
var newlist=[{"Subitems":[
{
"p_id":"a101",
"items": [
{"p_id": "a101", "model": "M-Plaz","price": 2500},
{"p_id": "a101", "model": "Z-Plaz","price": 3500}
]},{
"p_id": "a102",
"items": [
{"p_id": "a102", "model": "M-Neo", "price": 1560},
{"p_id": "a102", "model": "N-Neo1","price": 3600}
]},
]
}];
請問我需要幫助..
uj5u.com熱心網友回復:
您可以通過以下方式做到這一點:
newlist.addAll([
{'Subitems': itemlist1}
]);
列印(newlist.toString());
uj5u.com熱心網友回復:
下面的代碼為您提供了所需的輸出。
var itemlist1 = [
{"p_id": "a101", "model": "M-Plaz", "price": 2500},
{"p_id": "a101", "model": "Z-Plaz", "price": 3500},
{"p_id": "a102", "model": "M-Neo", "price": 1560},
{"p_id": "a102", "model": "N-Neo1", "price": 3600}
];
var newlist = groupBy(itemlist1, (Map obj) => obj['p_id']);
var requiredOutput = [
{"Subitems": []}
];
newlist.forEach((k, v) => {
requiredOutput[0]["Subitems"]!.add({"p_id": k, "items": v})
});
print(requiredOutput);
注意:import "package:collection/collection.dart";在匯入中添加行。
uj5u.com熱心網友回復:
我建議您不要直接使用Map<String, dynamic>從 Json 獲得的檔案。您寧愿為您的產品定義一個模型。
class Product {
final String pId;
final String model;
final double price;
Product({
required this.pId,
required this.model,
required this.price
});
Product.fromJson(Map<String, dynamic> json):
pId = json['p_id'] as String,
model = json['model'] as String,
price = json['price'] as double;
Map<String, dynamic> toJson() => {
'p_id': pId,
'model': model,
'price': price
};
}
注意:也請查看json_serializable&freezed包。
然后,按 id 對產品進行分組變得更容易:
void main() {
final List<Product> list =[
{"p_id": "a101", "model": "M-Plaz","price": 2500},
{"p_id": "a101", "model": "Z-Plaz","price": 3500},
{"p_id": "a102", "model": "M-Neo", "price": 1560},
{"p_id": "a102", "model": "N-Neo1","price": 3600},
].map((item) => Product.fromJson(item)).toList();
final Map<String, List<Product>> processed = list.fold({}, (pMap, product) => {
...pMap,
product.pId: [...(pMap[product.pId] ?? []), product]
});
print(jsonEncode(processed));
}
控制臺日志:
{"a101":[{"p_id":"a101","model":"M-Plaz","price":2500},{"p_id":"a101","model":"Z-Plaz","price":3500}],"a102":[{"p_id":"a102","model":"M-Neo","price":1560},{"p_id":"a102","model":"N-Neo1","price":3600}]}
uj5u.com熱心網友回復:
試試這個代碼片段:
var itemlist1=[
{"p_id": "a101", "model": "M-Plaz","price": 2500},
{"p_id": "a101", "model": "Z-Plaz","price": 3500},
{"p_id": "a102", "model": "M-Neo", "price": 1560},
{"p_id": "a102", "model": "N-Neo1","price": 3600}];
// list for subItems
var subItems = [];
itemlist1.forEach((item){
// check for subitem for p_id already exists or not
List items = subItems.where((i)=>
i['p_id'] == (item)['p_id']
).toList();
if(items.length > 0 ){
(items[0] as Map<String,dynamic>)['items'].add(item);
}else {
Map newMap = Map<String,dynamic>();
newMap.putIfAbsent('p_id', () => (item)['p_id'].toString());
List newList = [item];
newMap.putIfAbsent('items', () => newList);
subItems.add(newMap);
}
});
var output = [
{"Subitems": subItems}
];
print(output);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/433715.html
上一篇:如何使用其專案對此進行排序?
