как сериализировать json, если формат List>>>?
я получаю данные в формате:
[
[
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
],
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
],
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
]
],
[
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
],
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
],
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
]
]
]
как правильно этот json сериализировать правильно чтобы не падал производительность?
использовал следующий способ но при получении большого количества данных производительность сильно падает:
class MapData {
final String a;
final String b;
final String c;
MapData({this.a, this.b, this.c});
}
при initState использовал это:
var allData = json.decode(widget.data);
var myData = List<List<List<MapData>>>();
for (int i = 0; i < allData.length; i++) {
myData.add([]);
for (int i0 = 0; i0 < allData[i].length; i0++) {
myData[i].add([]);
for (int i1 = 0; i1 < allData[i][i0].length; i1++) {
var record = MapData(
a: allData[i][i0][i1]['a'],
b: allData[i][i0][i1]['b'],
c: allData[i][i0][i1]['c'],);
myData[i][i0].add(record);
}
}
}
я использую все данные из этого формата json, то есть List(вертикальный список)<List(горизонтальный список внутри вертикального списка)<List(еще один список внутри горизонтального списка)<Map<String,String>(отображаемые данные внитри списка)>>>
Ответы (1 шт):
Желательно такие тяжёлые вещи выносить в отдельные isolate. И тройной цикл всегда будет долгим, здесь уже ничего не сделаешь...
Даже не представляю для чего это нужно, но вот:
import 'dart:convert';
void main() {
print("Start 1");
List<List<List<MapData>>> temp = mapDataFromJson("""
[
[
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
],
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
],
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
]
],
[
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
],
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
],
[
{
"a": "1",
"b": "2",
"c": "3"
},
{
"a": "1",
"b": "2",
"c": "3"
}
]
]
]
""");
print(temp[0][0][0].a);
print("Start 2");
temp.forEach((x) => x.forEach((y) => y.forEach((z) => print(z.b))));
}
List<List<List<MapData>>> mapDataFromJson(String str) =>
List<List<List<MapData>>>.from(json.decode(str).map(
(x) => List<List<MapData>>.from(x.map(
(x) => List<MapData>.from(
x.map((x) => MapData.fromJson(x)),
),
)),
));
String mapDataToJson(List<List<List<MapData>>> data) =>
json.encode(List<dynamic>.from(
data.map((x) => List<dynamic>.from(
x.map((x) => List<dynamic>.from(
x.map((x) => x.toJson()),
)),
)),
));
class MapData {
final String a;
final String b;
final String c;
MapData({
this.a,
this.b,
this.c,
});
factory MapData.fromJson(Map<String, dynamic> json) => MapData(
a: json["a"],
b: json["b"],
c: json["c"],
);
Map<String, dynamic> toJson() => {
"a": a,
"b": b,
"c": c,
};
}