#arrays #loops #flutter #dart #multidimensional-array
#массивы #циклы #flutter #dart #многомерный массив
Вопрос:
У меня есть массив, и этот массив я получаю из JSON, но этот массив неизвестен, насколько он глубокий, и я просто хочу сделать его 2-мя измерениями parrent и children. Я привожу в пример только 3 измерения, но в реальном случае это может быть неизвестно.
Этот массив имеет один и тот же объект от родительского и дочернего элементов. Вы можете увидеть пример здесь.
Из этого :
{
"brand_id": "1",
"name": "Civic",
"type": "Sedan",
"children": [
{
"brand_id": "1",
"name": "Civic Type-R",
"type": "Sedan",
"children": [
{
"brand_id": "1",
"name": "Civic Type-R 2020",
"type": "Sedan",
"children": [
{
"brand_id": "1",
"name": "Civic Type-R 2020 A",
"type": "Sedan"
},
{
"brand_id": "1",
"name": "Civic Type-R 2020 B",
"type": "Sedan"
}
]
},
{
"brand_id": "1",
"name": "Civic Type-R 2019",
"type": "Sedan",
"children": [
{
"brand_id": "1",
"name": "Civic Type-R 2019 A",
"type": "Sedan"
}
]
}
]
}
]
}
Я надеюсь, что пример может быть таким :
{
"brand_id": "1",
"name": "Civic",
"type": "Sedan",
"children": [
{
"brand_id": "1",
"name": "Civic Type-R",
"type": "Sedan"
},
{
"brand_id": "1",
"name": "Civic Type-R 2020",
"type": "Sedan"
},
{
"brand_id": "1",
"name": "Civic Type-R 2020 A",
"type": "Sedan"
},
{
"brand_id": "1",
"name": "Civic Type-R 2020 B",
"type": "Sedan"
},
{
"brand_id": "1",
"name": "Civic Type-R 2019",
"type": "Sedan"
},
{
"brand_id": "1",
"name": "Civic Type-R 2019 A",
"type": "Sedan"
}
]
}
Спасибо.
Комментарии:
1. Можете ли вы привести более простой пример или, по крайней мере, правильно его отформатировать. Это очень трудно прочитать и увидеть разницу.
2. Привет @Ridcully спасибо за ответ, можете ли вы отформатировать пример json с помощью viewer?
3. Пожалуйста, также отформатируйте первый JSON, чтобы мы могли лучше видеть различия
4. Хорошо сделано @Ridcully
Ответ №1:
Класс модели
import 'dart:convert';
class MyModel {
String brand_id;
String name;
String type;
List<ChildrenModel> children;
MyModel({
this.brand_id,
this.name,
this.type,
this.children,
});
factory MyModel.fromJson(Map<String, dynamic> json) {
return new MyModel(
brand_id: json['brand_id'].toString(),
name: json['name'].toString(),
type: json['type'].toString(),
children: (json['children'] as List).map((i) => ChildrenModel.fromJson(i)).toList(),
);
}
}
class ChildrenModel {
String brand_id;
String name;
String type;
ChildrenModel({
this.brand_id,
this.name,
this.type,
});
factory ChildrenModel.fromJson(Map<String, dynamic> json) {
return new ChildrenModel(
brand_id: json['brand_id'].toString(),
name: json['name'].toString(),
type: json['type'].toString(),
);
}
}
Ответ №2:
Вы можете ссылаться на один и тот же объект класса внутри класса
class Brand{
String id;
String name;
Strng type;
List<Brand> children;
Brand({this.id, this.name, this.type, this.children});
Brand.fromJson(Map<String, dynamic> json) {
id = json['brand_id'];
name = json['name'];
type = json['type'];
if (json['children'] != null) {
children = new List<Brand>();
json['children'].forEach((v) {
children.add(Brand.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['brand_id'] = this.id;
data['name'] = this.name;
data['type'] = this.type;
if (this.children != null) {
data['children'] = this.children.map((v) => v.toJson()).toList();
}
return data;
}
}
Создайте свою модель следующим образом и соответствующим образом преобразуйте json.