Я действительно не уверен, что это то, что вы хотите, но вот моя реализация:
import 'dart:convert';
import 'dart:io';
void main() {
final jsonEg1 = jsonDecode(eg1) as List<dynamic>;
final keyListEg1 = parseKeyList(jsonEg1);
print(keyListEg1);
// [ABC, BVBV, NBN, MNM]
print(parseElements(jsonEg1));
// [[100, 200, 87, 9], [1004, 90, 847, 49], [1040, 2050, 867, 79]]
final jsonEg2 = jsonDecode(eg2) as List<dynamic>;
final keyListEg2 = parseKeyList(jsonEg2);
print(keyListEg2);
// [PQR, XYZ, POI, IOK, LOP, MLP]
print(parseElements(jsonEg2));
// [[100, 200, 87, 9, 890, 678], [1004, 90, 847, 49, 890, 678], [1040, 2050, 867, 79, 890, 678]]
}
List<String> parseKeyList(List<dynamic> json) =>
((json.last as Map<String, dynamic>)['keyList'] as String).split(',');
List<List<int>> parseElements(List<dynamic> json) {
final result = json
.take(json.length - 1)
.cast<Map<String, dynamic>>()
.map((data) => parseKeyList(json).map((key) => data[key] as int).toList())
.toList();
return result;
}
const String eg1 = '''
[
{"ABC":100, "BVBV":200,"NBN":87,"MNM":9},
{"ABC":1004, "BVBV":90,"NBN":847,"MNM":49},
{"ABC":1040, "BVBV":2050,"NBN":867,"MNM":79},
{"overallScore":10000,"keyList":"ABC,BVBV,NBN,MNM"}
]
''';
const String eg2 = '''
[
{"PQR":100, "XYZ":200,"POI":87,"IOK":9,"LOP":890,"MLP":678},
{"PQR":1004, "XYZ":90,"POI":847,"IOK":49,"LOP":890,"MLP":678},
{"PQR":1040, "XYZ":2050,"POI":867,"IOK":79,"LOP":890,"MLP":678},
{"overallScore":10000,"keyList":"PQR,XYZ,POI,IOK,LOP,MLP"}
]
''';
Структура данных результата не такая, как вы описали в своем вопросе, но это потому, что она делает очень мало смысла в этом, так как это не может эффективно масштабироваться, а количество значений динамически c.
Вместо этого результат представлен в структуре List<List<int>>
, поэтому второе значение первого результата может быть, например, извлечено как parsedElementsEg2[0][1]
и упрощает l oop через значения;